|
|
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能使内外网都能访问公司的服务器?6 Z9 i0 j" W* b% |
A:# web
, s4 {' f: A4 }. s0 F# 用DNAT作端口映射& @3 j' i( T9 F2 b
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10
" i) P- N) T$ y9 g+ f# 用SNAT作源地址转换(关键),以使回应包能正确返回
3 {% w R4 ]+ w0 a+ ]( `iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.1
# _. v5 N1 e; t n" |3 ]5 Z# 一些人经常忘了打开FORWARD链的相关端口,特此增加: [( d' Y% }( L! L; |( H
iptables -A FORWARD -o eth0 -d 192.168.1.10 -p tcp --dport 80 -j ACCEPT* N/ r1 c1 E" Y5 i
iptables -A FORWARD -i eth0 -s 192.168.1.10 -p tcp --sport 80 -m --state ESTABLISHED -j ACCEPT* h9 F2 d2 s) o- j( \
& k7 g' e: q/ }6 e r3 W+ Q# ftp: \/ L& v: I! G: o
modprobe ip_nat_ftp ###加载ip_nat_ftp模块(若没有编译进内核),以使ftp能被正确NAT( J. Z) E- O) U6 t5 S9 r9 m
modprobe ip_conntrack_ftp ###加载ip_conntrack_ftp模块
# m. @$ \ ^- O# S# L( s# T# 用DNAT作端口映射& ]% U. Q4 C6 l/ o/ e3 w5 n% x
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 21 -j DNAT --to 192.168.1.11
1 y' H/ ~6 u4 \$ s# i2 p9 u" ~iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 21 -j ACCEPT, n# M8 M( x& i' V
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 21 -m --state ESTABLISHED -j ACCEPT
% R% T* \' _7 E5 k" g7 G/ Uiptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 20 -m --state ESTABLISHED,RELATED -j ACCEPT
; J8 B/ V) _. K0 D. Oiptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 20 -m --state ESTABLISHED -j ACCEPT0 Q7 S# Z5 d- p& F! g0 d
iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 1024: -m --state ESTABLISHED,RELATED -j ACCEPT
/ H, F! z2 W; K9 _, Q7 s& Giptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 1024: -m --state ESTABLISHED -j ACCEPT
o' S& z1 _% @' d' D% |$ @# 用SNAT作源地址转换(关键),以使回应包能正确返回
$ \0 }, u' t5 V" v' Jiptables -t nat -A POSTROUTING -d 192.168.1.11 -p tcp --dport 21 -i eth0 -j SNAT --to 192.168.1.1 0 x a7 ?6 r' X3 v8 y! Q
1 t2 N6 ?3 I! ~+ U& v
Q:网络环境如上一问题,还在网关上用squid进行透明代理,也作了SNAT了,为什么内网还是不能访问公司的web服务器?iptables如下:- G) p* n2 F0 X) v: ?5 v
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128
+ ^/ u \; n2 piptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10- l l) R( I: H& V& N' \
iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.17 x6 u# p A! _0 J( X
A:问题主要在PREROUTING链中REDIRECT和DNAT的顺序,由于先进行了REDIRECT(重定向),则到第二句DNAT时,端口已变为3128,不匹配第二句的目的端口80,DNAT也就不会执行,不能到达正确的目的地。解决的办法有两个:4 w2 e+ w0 o3 M+ k( t7 S& l
1、把REDIRECT语句放到DNAT语句的后面,如下:
3 }0 h7 |; _5 F4 Y0 i% liptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10 {, z4 P9 z k' L- Y7 V
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128
) w# f7 A- b& V( m6 T. v/ v2、在REDIRECT语句中增加匹配目的地址"-d ! a.b.c.d",如下:6 h( C; e2 s' d, j! F- ]+ p
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 3128- `7 p, F/ F* a' s# e9 V* U
|
|