|
|
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能使内外网都能访问公司的服务器?
! H2 }* N; L/ \2 \; o9 j/ [% o% ?/ |A:# web
% O/ s, L3 n3 k C# `* v+ j! W# 用DNAT作端口映射. Z4 w' E# @2 Y+ Y4 M
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.105 a7 g' \3 f' M3 v
# 用SNAT作源地址转换(关键),以使回应包能正确返回8 ?$ ^# O5 z- j' s* A
iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.1
1 H" k, }: L. B# 一些人经常忘了打开FORWARD链的相关端口,特此增加, E4 a: Y, ]" A0 N" h n( H% g
iptables -A FORWARD -o eth0 -d 192.168.1.10 -p tcp --dport 80 -j ACCEPT! Y3 o" P6 P7 @( E6 u' `
iptables -A FORWARD -i eth0 -s 192.168.1.10 -p tcp --sport 80 -m --state ESTABLISHED -j ACCEPT
) N- \/ Q: R& A2 c2 _+ X
4 t9 v; v2 I; b4 `8 W! b3 i# ftp
2 m3 f" ]. J0 B( l) H' [1 c( T8 bmodprobe ip_nat_ftp ###加载ip_nat_ftp模块(若没有编译进内核),以使ftp能被正确NAT
! X& ?' F) z5 ^' Y# ?4 mmodprobe ip_conntrack_ftp ###加载ip_conntrack_ftp模块9 d" v6 J8 B2 l' i% g7 U( v
# 用DNAT作端口映射$ _6 Q I% [5 `9 L* p
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 21 -j DNAT --to 192.168.1.11
0 F2 l0 y8 S! F- y/ Niptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 21 -j ACCEPT
: T8 i+ g* g1 [ u3 Y- _' yiptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 21 -m --state ESTABLISHED -j ACCEPT n2 ?$ Q) F( E# D* a- q% s
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 20 -m --state ESTABLISHED,RELATED -j ACCEPT& \2 e2 w% C) ]' ]# O& g- p
iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 20 -m --state ESTABLISHED -j ACCEPT
7 Y9 x. j* Y9 }, \iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 1024: -m --state ESTABLISHED,RELATED -j ACCEPT$ M3 W9 x9 |( d7 w$ Z9 j6 T# h5 Q
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 1024: -m --state ESTABLISHED -j ACCEPT
: s8 y# ~# k$ \9 M- s J0 ^' d# 用SNAT作源地址转换(关键),以使回应包能正确返回
" J9 z- b) L5 t% |, ?5 V% {0 jiptables -t nat -A POSTROUTING -d 192.168.1.11 -p tcp --dport 21 -i eth0 -j SNAT --to 192.168.1.1 " |" a/ ?/ f4 x, p' j
( I: d7 O+ Q) M7 G2 j& f: v. P; M1 i' BQ:网络环境如上一问题,还在网关上用squid进行透明代理,也作了SNAT了,为什么内网还是不能访问公司的web服务器?iptables如下:
: |- X0 x/ ?; ^iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128' \) U5 J+ T& g2 O% v
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.103 a( G2 B& f" w y& G
iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.1
$ L9 {" O, {) }6 N1 ?1 }A:问题主要在PREROUTING链中REDIRECT和DNAT的顺序,由于先进行了REDIRECT(重定向),则到第二句DNAT时,端口已变为3128,不匹配第二句的目的端口80,DNAT也就不会执行,不能到达正确的目的地。解决的办法有两个:- U4 q( p" Z( }% I$ `" B0 X
1、把REDIRECT语句放到DNAT语句的后面,如下:9 M( Q/ P! I: l; c
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10
5 j, p5 B x9 e! O# e U( piptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128, _0 s3 e5 b- L9 ]3 @9 P3 e
2、在REDIRECT语句中增加匹配目的地址"-d ! a.b.c.d",如下:, a9 I$ L+ [9 r" h, 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 31287 p! n+ Q% q8 x4 {. E6 `
|
|