找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 13563|回复: 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能使内外网都能访问公司的服务器?2 |0 U4 @: u, t) D9 G
A:# web
) ?- H  r0 f* L1 u  E% W" _4 y8 N# 用DNAT作端口映射
: }  i1 e) c% F8 l3 S' g3 }iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10
. b2 D: B# H) S: B# 用SNAT作源地址转换(关键),以使回应包能正确返回
% A6 w7 n5 N6 t$ ]& ~  ]7 n! L" Viptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.18 H6 i  R+ [+ l  m/ h" f$ h
# 一些人经常忘了打开FORWARD链的相关端口,特此增加+ e  }! ]/ C! v
iptables -A FORWARD -o eth0 -d 192.168.1.10 -p tcp --dport 80 -j ACCEPT
% U" q; Y0 [1 U9 t- G" H8 u$ hiptables -A FORWARD -i eth0 -s 192.168.1.10 -p tcp --sport 80 -m --state ESTABLISHED -j ACCEPT
" G/ Q. ~  Y0 ~# S0 g  W5 G9 O( J. [# d* m' U
# ftp
8 }) M- q2 w% C; Z( G; Q7 G* xmodprobe ip_nat_ftp ###加载ip_nat_ftp模块(若没有编译进内核),以使ftp能被正确NAT
3 t* t5 t4 x, a3 P3 Y! wmodprobe ip_conntrack_ftp ###加载ip_conntrack_ftp模块
+ w) f' `& g) O+ d' Y: R9 p8 W; ?# 用DNAT作端口映射9 i/ L5 X1 ]" w& D5 W$ L; Y* ]
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 21 -j DNAT --to 192.168.1.11% Y+ g7 f( e" Y0 H, V/ U. U( u
iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 21 -j ACCEPT* x, [4 D* i$ f* f+ e% e: i! S" l
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 21 -m --state ESTABLISHED -j ACCEPT$ v: D: K: Z, b$ T4 C
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 20 -m --state ESTABLISHED,RELATED -j ACCEPT
8 s3 v. D2 |& C. E  g# V( P' `iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 20 -m --state ESTABLISHED -j ACCEPT/ g3 ]$ o4 N$ B0 }; _+ Y* b: \
iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 1024: -m --state ESTABLISHED,RELATED -j ACCEPT
0 `* p( B' W; M) jiptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 1024: -m --state ESTABLISHED -j ACCEPT
. O, e* d; q: o( j* e; ^# 用SNAT作源地址转换(关键),以使回应包能正确返回7 M6 X7 A, W& \' |$ x( K: r
iptables -t nat -A POSTROUTING -d 192.168.1.11 -p tcp --dport 21 -i eth0 -j SNAT --to 192.168.1.1
' s# c) q$ ^/ p3 a5 l) W# g/ }2 v
% l2 ^# i1 Y, q6 j8 X0 |( bQ:网络环境如上一问题,还在网关上用squid进行透明代理,也作了SNAT了,为什么内网还是不能访问公司的web服务器?iptables如下:
3 v4 p+ l$ e7 C* i) viptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128# R4 V4 a: ^. `
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10
: W5 w) |. A$ K' _, Xiptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.1
4 r1 I4 ?9 W( ]+ G$ J/ C6 }A:问题主要在PREROUTING链中REDIRECT和DNAT的顺序,由于先进行了REDIRECT(重定向),则到第二句DNAT时,端口已变为3128,不匹配第二句的目的端口80,DNAT也就不会执行,不能到达正确的目的地。解决的办法有两个:9 t5 l6 {: o  q7 p& y9 D3 X
1、把REDIRECT语句放到DNAT语句的后面,如下:
# ~2 O- l, ?8 l2 o! c( ]9 yiptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10
8 q1 P. }5 @, \2 Q  niptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128: ?, K+ \5 f$ I6 c' _5 r8 [2 t/ v
2、在REDIRECT语句中增加匹配目的地址"-d ! a.b.c.d",如下:
& L! g& N  o8 h; g8 viptables -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
3 K# q" |# Q- L7 @
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-3 03:57 , Processed in 0.041216 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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