|
|
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能使内外网都能访问公司的服务器?
# k R5 j, f" V; nA:# web$ Q8 o4 o- \9 W8 a- a. W" M
# 用DNAT作端口映射& I; _9 `0 u i) _! {/ o6 o
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10
, s# x/ }3 V/ q/ ~: f- f( O# 用SNAT作源地址转换(关键),以使回应包能正确返回
& A+ K& e4 m1 ?* o+ q# M: niptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.1. c: D% |+ {" I7 B( K# \
# 一些人经常忘了打开FORWARD链的相关端口,特此增加2 B* K! B( X7 L: e$ l+ K$ X
iptables -A FORWARD -o eth0 -d 192.168.1.10 -p tcp --dport 80 -j ACCEPT5 v! G, e4 k' L1 t8 R' x
iptables -A FORWARD -i eth0 -s 192.168.1.10 -p tcp --sport 80 -m --state ESTABLISHED -j ACCEPT
0 V2 [/ L! V, Q1 d8 L2 s1 s% Z' x% P! X3 J! M5 s/ D
# ftp
8 w# f: Y4 t' |+ w/ N7 S, }modprobe ip_nat_ftp ###加载ip_nat_ftp模块(若没有编译进内核),以使ftp能被正确NAT8 E [+ j4 {& s p7 m' B- s
modprobe ip_conntrack_ftp ###加载ip_conntrack_ftp模块% e- S8 q0 I; a+ S
# 用DNAT作端口映射
' Z/ ], \# I+ eiptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 21 -j DNAT --to 192.168.1.118 ]& r5 J0 Z, _0 [6 g! x
iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 21 -j ACCEPT
% F8 n5 ^( G4 G+ F' k, N4 j. Miptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 21 -m --state ESTABLISHED -j ACCEPT
' W/ z0 ~5 Q5 [; Jiptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 20 -m --state ESTABLISHED,RELATED -j ACCEPT, W8 I' z" S; w1 A
iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 20 -m --state ESTABLISHED -j ACCEPT
3 ~9 Q1 y! i; }5 D. O' |/ siptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 1024: -m --state ESTABLISHED,RELATED -j ACCEPT
3 |4 E, R* m$ H* O, s3 ]) }5 yiptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 1024: -m --state ESTABLISHED -j ACCEPT: o1 ^/ V' E. p6 U
# 用SNAT作源地址转换(关键),以使回应包能正确返回9 C6 d- A5 a2 n' F+ L, A
iptables -t nat -A POSTROUTING -d 192.168.1.11 -p tcp --dport 21 -i eth0 -j SNAT --to 192.168.1.1
/ t" I1 G4 s# ~8 s
N2 D/ `2 B3 q' @8 |. `Q:网络环境如上一问题,还在网关上用squid进行透明代理,也作了SNAT了,为什么内网还是不能访问公司的web服务器?iptables如下:
1 I; j5 G3 x* e% s- xiptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128
6 H. i+ r, L5 k2 O/ L- riptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10% b# w" k5 h7 b& c7 o- o3 A
iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.18 I/ i% F& u) ]3 x. S) g. ]" o
A:问题主要在PREROUTING链中REDIRECT和DNAT的顺序,由于先进行了REDIRECT(重定向),则到第二句DNAT时,端口已变为3128,不匹配第二句的目的端口80,DNAT也就不会执行,不能到达正确的目的地。解决的办法有两个:
2 g4 O$ b6 p1 P; U+ T7 }1、把REDIRECT语句放到DNAT语句的后面,如下:
: G7 I- Z9 a' D0 S& Wiptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10& U9 P# w" w2 ]; s Y8 G T1 V
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128: G' m9 z- L- w
2、在REDIRECT语句中增加匹配目的地址"-d ! a.b.c.d",如下:
- E: `$ w9 Z( }) Ciptables -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/ Q% p* e) `7 y: a }
|
|