|
|
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能使内外网都能访问公司的服务器?: X. `! k m8 {- r* N
A:# web( ~4 l& e8 o3 x: o0 n4 w& g
# 用DNAT作端口映射6 _* ]& F v2 T9 a7 B
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10# Z- H6 l1 r% ?1 @6 M* A3 u
# 用SNAT作源地址转换(关键),以使回应包能正确返回3 M' n8 N% r/ d
iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.1
" Y0 y l4 W: E# 一些人经常忘了打开FORWARD链的相关端口,特此增加
: w/ y1 b/ u; j9 ziptables -A FORWARD -o eth0 -d 192.168.1.10 -p tcp --dport 80 -j ACCEPT
0 E2 I# V3 j. Qiptables -A FORWARD -i eth0 -s 192.168.1.10 -p tcp --sport 80 -m --state ESTABLISHED -j ACCEPT
: i X) j% {6 Y$ S; E9 o8 J9 f5 r3 `$ M+ z. F
# ftp3 Z9 S( h1 z4 N4 ]# b+ }
modprobe ip_nat_ftp ###加载ip_nat_ftp模块(若没有编译进内核),以使ftp能被正确NAT1 I' J8 {: X/ k. Y, j, ^
modprobe ip_conntrack_ftp ###加载ip_conntrack_ftp模块
7 h3 {5 ]1 u0 x# 用DNAT作端口映射
, b/ U, |0 A C+ Yiptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 21 -j DNAT --to 192.168.1.11! x4 n* ]! J8 O. }/ U
iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 21 -j ACCEPT
' k6 ~! p3 ^) `$ x7 }iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 21 -m --state ESTABLISHED -j ACCEPT8 Z) v0 O; o$ U, u0 y
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 20 -m --state ESTABLISHED,RELATED -j ACCEPT
6 O. k: _" W4 biptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 20 -m --state ESTABLISHED -j ACCEPT
! I$ V6 c& d6 Piptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 1024: -m --state ESTABLISHED,RELATED -j ACCEPT
3 R* N4 O. s I- C" G6 M2 W3 Fiptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 1024: -m --state ESTABLISHED -j ACCEPT
3 r- T9 L3 t1 _9 K' G# 用SNAT作源地址转换(关键),以使回应包能正确返回
1 S( Y7 U' I; f7 e. w* Oiptables -t nat -A POSTROUTING -d 192.168.1.11 -p tcp --dport 21 -i eth0 -j SNAT --to 192.168.1.1
/ w. g4 t( H8 `# d" ^3 Q
" l& x( v5 F% U- p1 dQ:网络环境如上一问题,还在网关上用squid进行透明代理,也作了SNAT了,为什么内网还是不能访问公司的web服务器?iptables如下:* \# r: W0 P( ^5 @2 t" f
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128: a! }/ [, t* Q0 h& U* L% \
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10
+ y/ v- [3 M, E) D0 Yiptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.11 r7 F3 w* b! [3 ?' P+ N4 w3 K! ?- m
A:问题主要在PREROUTING链中REDIRECT和DNAT的顺序,由于先进行了REDIRECT(重定向),则到第二句DNAT时,端口已变为3128,不匹配第二句的目的端口80,DNAT也就不会执行,不能到达正确的目的地。解决的办法有两个:
8 }$ w9 c! n5 D% ^ Z5 f/ Q9 }9 x1、把REDIRECT语句放到DNAT语句的后面,如下:
$ z9 M: y, Y3 R% r1 A) Biptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10
- _- k h- h1 Xiptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128, D1 s6 _+ }5 I" f2 m8 W
2、在REDIRECT语句中增加匹配目的地址"-d ! a.b.c.d",如下:( w+ Q7 Q$ l3 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 31288 C3 d# K- D; l. E) z$ f! p
|
|