|
|
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能使内外网都能访问公司的服务器?( t+ t1 ^- `- K {# q/ k
A:# web; ]4 |7 O6 ~6 U+ N! r
# 用DNAT作端口映射+ e- L: X. G8 e# \" m K. A2 O
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10' S# x b0 u$ V1 b- w, J2 |* b
# 用SNAT作源地址转换(关键),以使回应包能正确返回
$ ?4 ~0 W5 I# e1 x/ B% j2 Y$ miptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.1
# `. p5 _7 f7 C1 z# 一些人经常忘了打开FORWARD链的相关端口,特此增加
. h" u" k0 ?: d. V% fiptables -A FORWARD -o eth0 -d 192.168.1.10 -p tcp --dport 80 -j ACCEPT
7 `! B2 g( _+ {7 `5 f+ Q. Wiptables -A FORWARD -i eth0 -s 192.168.1.10 -p tcp --sport 80 -m --state ESTABLISHED -j ACCEPT
& m! Q# j2 E. {# P. k. x& j6 r) z- \$ l0 W2 R
# ftp
% |% m6 {# S9 V7 j4 nmodprobe ip_nat_ftp ###加载ip_nat_ftp模块(若没有编译进内核),以使ftp能被正确NAT. L% [- a/ \0 K. M* K- I% v- O
modprobe ip_conntrack_ftp ###加载ip_conntrack_ftp模块
5 i6 p" D- h2 I3 _" Q( l) W# 用DNAT作端口映射7 w, p+ K) l7 o Q' b5 D) I
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 21 -j DNAT --to 192.168.1.11
! p+ w1 y3 y' Q2 s+ y9 E; liptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 21 -j ACCEPT
( _9 }2 B6 x% q* L* u, x3 kiptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 21 -m --state ESTABLISHED -j ACCEPT
7 A5 Z9 }' O1 e6 D" \( C" M3 Hiptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 20 -m --state ESTABLISHED,RELATED -j ACCEPT
- [/ }/ I q% l- eiptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 20 -m --state ESTABLISHED -j ACCEPT
4 u" T( \; ~- a2 V5 ~3 jiptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 1024: -m --state ESTABLISHED,RELATED -j ACCEPT
& A% B% j( v2 [4 Yiptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 1024: -m --state ESTABLISHED -j ACCEPT. W, Q$ F" g& Z$ s% [
# 用SNAT作源地址转换(关键),以使回应包能正确返回9 J* D i8 v% v! z; z8 q! |
iptables -t nat -A POSTROUTING -d 192.168.1.11 -p tcp --dport 21 -i eth0 -j SNAT --to 192.168.1.1 ( o: _" u) W6 x1 `4 ~
0 S6 }) C! {# kQ:网络环境如上一问题,还在网关上用squid进行透明代理,也作了SNAT了,为什么内网还是不能访问公司的web服务器?iptables如下: v0 M7 J$ C; H# N0 `5 r1 l
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 31285 F, r- e. ?1 W
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10
2 d6 R# k8 H/ a5 w, Aiptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.14 k. x5 I9 W( Q/ W7 |' N9 r
A:问题主要在PREROUTING链中REDIRECT和DNAT的顺序,由于先进行了REDIRECT(重定向),则到第二句DNAT时,端口已变为3128,不匹配第二句的目的端口80,DNAT也就不会执行,不能到达正确的目的地。解决的办法有两个:
1 p- n$ d2 d+ M8 D$ v1、把REDIRECT语句放到DNAT语句的后面,如下:
w9 _$ M9 N& V! H+ m @iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10
* D6 i' Y# U) h) h/ _& y" Qiptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128! X5 N( }2 F* I5 j
2、在REDIRECT语句中增加匹配目的地址"-d ! a.b.c.d",如下:1 z9 e* o# ]2 j: `, o$ G! }
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
6 a2 W+ Q( n- w, ^# B$ D* a j9 K" ~ |
|