找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14289|回复: 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能使内外网都能访问公司的服务器?* ?7 S0 `4 i! W+ {) B% K* Z1 C
A:# web
& K* j2 l+ j/ B# \' i2 x# 用DNAT作端口映射
5 t, {! O( V1 [0 b" d% F' Yiptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10
. A! O) z0 Y! A3 N6 L% I# 用SNAT作源地址转换(关键),以使回应包能正确返回  T; T. J4 v3 }
iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.1
2 a5 p* I5 Q5 F$ m: c" m# 一些人经常忘了打开FORWARD链的相关端口,特此增加
; l3 `9 D7 z( tiptables -A FORWARD -o eth0 -d 192.168.1.10 -p tcp --dport 80 -j ACCEPT4 j/ o4 X2 ?& h5 h
iptables -A FORWARD -i eth0 -s 192.168.1.10 -p tcp --sport 80 -m --state ESTABLISHED -j ACCEPT
: f8 N' ^/ R9 b: G3 D$ s0 |. V+ u' W
# ftp) X1 w! H8 U6 @* [* y  A
modprobe ip_nat_ftp ###加载ip_nat_ftp模块(若没有编译进内核),以使ftp能被正确NAT
- g9 R0 A" C$ U$ p) a/ kmodprobe ip_conntrack_ftp ###加载ip_conntrack_ftp模块8 W& \( ?$ y) G# h5 l
# 用DNAT作端口映射
, T, o: D" _* f- siptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 21 -j DNAT --to 192.168.1.118 ^! k, H* \3 n3 r. j* p
iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 21 -j ACCEPT# a, V+ |8 J( I& V- n5 f
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 21 -m --state ESTABLISHED -j ACCEPT- {( q& c  U( q- k
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 20 -m --state ESTABLISHED,RELATED -j ACCEPT, E1 J1 \; |) G5 F1 B
iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 20 -m --state ESTABLISHED -j ACCEPT
# {% Q5 q6 e" a1 riptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 1024: -m --state ESTABLISHED,RELATED -j ACCEPT
4 S9 E  `: }, O" }- diptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 1024: -m --state ESTABLISHED -j ACCEPT
: J+ E6 J2 t2 f" O  t( L9 ]% n# 用SNAT作源地址转换(关键),以使回应包能正确返回+ [6 E0 G; }. k6 a
iptables -t nat -A POSTROUTING -d 192.168.1.11 -p tcp --dport 21 -i eth0 -j SNAT --to 192.168.1.1
9 X+ E9 B! n7 W# v. ^. |$ {, A, Y# E' H. H4 J
; z0 {# Q6 ^# k+ q! AQ:网络环境如上一问题,还在网关上用squid进行透明代理,也作了SNAT了,为什么内网还是不能访问公司的web服务器?iptables如下:
; {0 u" i- |  Q1 M& fiptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128
$ N- F1 H1 S/ miptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10
  S/ b  m2 z! {% _% h; Z6 Kiptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.1
5 ^" O: M4 a4 a3 S6 ~0 r) EA:问题主要在PREROUTING链中REDIRECT和DNAT的顺序,由于先进行了REDIRECT(重定向),则到第二句DNAT时,端口已变为3128,不匹配第二句的目的端口80,DNAT也就不会执行,不能到达正确的目的地。解决的办法有两个:3 P. u8 T7 _: |* J7 f( e
1、把REDIRECT语句放到DNAT语句的后面,如下:
4 `/ A2 j2 W7 M7 y  [0 r, Fiptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10
8 N- r6 G, p% W1 p9 g& x6 Eiptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128- T$ A+ z  S! |! f1 M& s: M
2、在REDIRECT语句中增加匹配目的地址"-d ! a.b.c.d",如下:
8 X2 `7 s. {' q: I1 X1 Ciptables -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
& Q7 q' v$ V  D8 i  y1 {: h
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-3-26 06:17 , Processed in 0.068182 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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