找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 16169|回复: 0

Iptables 端口映射方法详解

[复制链接]
发表于 2013-1-27 21:04:48 | 显示全部楼层 |阅读模式
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
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|第一站论坛 ( 蜀ICP备06004864号-6 )

GMT+8, 2026-10-24 17:48 , Processed in 0.051147 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表