找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 16206|回复: 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能使内外网都能访问公司的服务器?
/ b9 P% B" y; e- g/ AA:# web
0 Q3 F  k7 ^9 N- u' B7 W# 用DNAT作端口映射
3 m/ L' @1 C+ G  ?# l4 liptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10: T. `/ j$ m& u6 k& J) \
# 用SNAT作源地址转换(关键),以使回应包能正确返回
7 f! @$ O" @* c% l* ciptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.1
, s- J3 f: `9 u3 z( ?3 S1 l# 一些人经常忘了打开FORWARD链的相关端口,特此增加3 ]: X9 v# o4 `6 T% `
iptables -A FORWARD -o eth0 -d 192.168.1.10 -p tcp --dport 80 -j ACCEPT
' q, L! A. q: J9 X; b# tiptables -A FORWARD -i eth0 -s 192.168.1.10 -p tcp --sport 80 -m --state ESTABLISHED -j ACCEPT
5 b7 l/ }3 z" G4 o5 d0 l% K% i1 ?5 s! Q/ f
# ftp7 |) X5 C9 G6 n
modprobe ip_nat_ftp ###加载ip_nat_ftp模块(若没有编译进内核),以使ftp能被正确NAT" S2 Q$ D2 g2 |( `% u* p3 F
modprobe ip_conntrack_ftp ###加载ip_conntrack_ftp模块
6 \0 s. R9 E5 a( _# 用DNAT作端口映射4 ^( x4 m. H7 ]1 h( G* ~' ^
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 21 -j DNAT --to 192.168.1.11
. i1 u7 B! D* r, z" Riptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 21 -j ACCEPT
' f8 \# U5 X& E# h4 j2 wiptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 21 -m --state ESTABLISHED -j ACCEPT  F# I! m+ S; Q0 Z7 f- g
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 20 -m --state ESTABLISHED,RELATED -j ACCEPT
4 b6 R( `/ c% b% o3 Oiptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 20 -m --state ESTABLISHED -j ACCEPT
% X# D, Z7 n5 I, G6 biptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 1024: -m --state ESTABLISHED,RELATED -j ACCEPT
$ I9 F+ h" e9 T, X/ @  Oiptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 1024: -m --state ESTABLISHED -j ACCEPT3 H% j  G1 L/ A: j5 u5 c5 m1 A
# 用SNAT作源地址转换(关键),以使回应包能正确返回0 q1 m, ~9 a% U* L- p
iptables -t nat -A POSTROUTING -d 192.168.1.11 -p tcp --dport 21 -i eth0 -j SNAT --to 192.168.1.1
0 B* U* F8 C1 _" I: G1 I$ D
+ e, |& _4 a* J& K# k+ Q& qQ:网络环境如上一问题,还在网关上用squid进行透明代理,也作了SNAT了,为什么内网还是不能访问公司的web服务器?iptables如下:  o8 {5 Q% a- ?( C# k
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128
# W6 U7 I; U& g  d& e4 |1 @1 U3 u" K0 Jiptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10
% f/ L) N  B) Yiptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.1" u& l; B; c% j2 i% @$ y$ H
A:问题主要在PREROUTING链中REDIRECT和DNAT的顺序,由于先进行了REDIRECT(重定向),则到第二句DNAT时,端口已变为3128,不匹配第二句的目的端口80,DNAT也就不会执行,不能到达正确的目的地。解决的办法有两个:
& g1 X# b: l1 s8 R, l1、把REDIRECT语句放到DNAT语句的后面,如下:% v9 W5 R" G6 l) n: k9 \7 G
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.106 W, S+ T  c5 v/ c
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128: [9 o; d( I0 n  |4 D
2、在REDIRECT语句中增加匹配目的地址"-d ! a.b.c.d",如下:! ?4 h5 e' @% ~( H+ V
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 31286 P1 w2 J' f/ m" C) v( w$ `
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-11-1 11:46 , Processed in 0.048678 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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