|
|
Q:一局域网192.168.1.0/24,有web和ftp服务器192.168.1.10、192.168.1.11,网关linux,内网eth0,IP为192.168.1.1,外网eth1,IP为a.b.c.d,怎样作NAT能使内外网都能访问公司的服务器?
2 U" N! E, S; ^A:# web0 X& c- {- o$ Y6 p2 x7 \
# 用DNAT作端口映射
/ H2 l0 @3 U# r% yiptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10# x: G7 H# S9 \0 _4 R" i7 X. o
# 用SNAT作源地址转换(关键),以使回应包能正确返回. v$ T' t5 N" j* i" J
iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.1. K, c! } J! B; R, \0 G% B7 P2 {7 X7 A
# 一些人经常忘了打开FORWARD链的相关端口,特此增加! d2 n7 @3 j4 r3 _# S" j
iptables -A FORWARD -o eth0 -d 192.168.1.10 -p tcp --dport 80 -j ACCEPT
4 O+ ?* u$ Y% i/ d! L7 N" e$ ziptables -A FORWARD -i eth0 -s 192.168.1.10 -p tcp --sport 80 -m --state ESTABLISHED -j ACCEPT7 X: C) ~: r& v4 R5 A4 M! q
$ I) |! [8 ]5 Q% W# p* [5 x# ftp! j6 S; v% C4 I- E5 Q
modprobe ip_nat_ftp ###加载ip_nat_ftp模块(若没有编译进内核),以使ftp能被正确NAT
0 S# O! X) f3 [- @# e1 I0 e( cmodprobe ip_conntrack_ftp ###加载ip_conntrack_ftp模块
* w( S! O* \8 C8 _0 {# S# 用DNAT作端口映射
! @& O, V- f7 tiptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 21 -j DNAT --to 192.168.1.11
/ K1 n, X1 x- X" Oiptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 21 -j ACCEPT
9 V' A+ o6 o. Riptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 21 -m --state ESTABLISHED -j ACCEPT8 }3 O. O) R( j% M# v! F3 ?
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 20 -m --state ESTABLISHED,RELATED -j ACCEPT! F4 ?$ o' Z" \% n; Q
iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 20 -m --state ESTABLISHED -j ACCEPT
0 w+ s* w9 q1 S' i- Wiptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 1024: -m --state ESTABLISHED,RELATED -j ACCEPT. n6 M4 a3 {+ h( _1 r/ J
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 1024: -m --state ESTABLISHED -j ACCEPT' W. D& b/ x: D4 i* I: ^
# 用SNAT作源地址转换(关键),以使回应包能正确返回/ n# ~9 B! X: M, m! v* R" j) P
iptables -t nat -A POSTROUTING -d 192.168.1.11 -p tcp --dport 21 -i eth0 -j SNAT --to 192.168.1.1
; Z9 |) j* L) G
7 c! m5 D" p+ {9 g/ J7 [3 ?2 lQ:网络环境如上一问题,还在网关上用squid进行透明代理,也作了SNAT了,为什么内网还是不能访问公司的web服务器?iptables如下:, t) g7 x& g9 q! e' ]/ ~
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128" @) j& A% w$ @0 U
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10" f* o: [, H, I3 o' L
iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.13 i$ W6 b* [* H$ g2 V: s$ s
A:问题主要在PREROUTING链中REDIRECT和DNAT的顺序,由于先进行了REDIRECT(重定向),则到第二句DNAT时,端口已变为3128,不匹配第二句的目的端口80,DNAT也就不会执行,不能到达正确的目的地。解决的办法有两个:
! L2 S* J2 m1 z1 d1、把REDIRECT语句放到DNAT语句的后面,如下:
/ l# G8 h% `2 u! ^2 l) biptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10
9 U* S; y1 r( w7 ?- M" kiptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 31282 Y9 G: ?" m; n8 e3 G
2、在REDIRECT语句中增加匹配目的地址"-d ! a.b.c.d",如下:7 ?% z0 s) G5 s* y
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -d ! a.b.c.d -p tcp --dport 80 -i eth0 -j REDIRECT --to 31280 n; g g4 o( w0 T2 C/ }4 Y
|
|