找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14450|回复: 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 f3 o0 f# }9 N' D3 OA:# web1 A% o+ f3 B+ t$ D. x3 {4 c6 d
# 用DNAT作端口映射
8 U8 E2 y5 r- Z7 a8 i$ W5 g3 ~' b$ Biptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10
. ]3 y8 B( P. q& Z0 |' W# 用SNAT作源地址转换(关键),以使回应包能正确返回+ d& L4 i# O4 X
iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.1; z0 i1 u# X4 S$ _$ L& Y
# 一些人经常忘了打开FORWARD链的相关端口,特此增加5 ]! o% _  O& J
iptables -A FORWARD -o eth0 -d 192.168.1.10 -p tcp --dport 80 -j ACCEPT
- Z) N# m. C+ eiptables -A FORWARD -i eth0 -s 192.168.1.10 -p tcp --sport 80 -m --state ESTABLISHED -j ACCEPT0 \% K) g8 K7 e3 J& [( a" q  H

1 r6 @' o5 w: Z# ftp
3 F! u* G4 |0 Q: C7 z5 ]; @modprobe ip_nat_ftp ###加载ip_nat_ftp模块(若没有编译进内核),以使ftp能被正确NAT
# w: [1 d& x9 ~; I! Lmodprobe ip_conntrack_ftp ###加载ip_conntrack_ftp模块% B" i) r% T9 k, B% G' y% G/ p7 p
# 用DNAT作端口映射+ K, h5 Y& n4 {
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 21 -j DNAT --to 192.168.1.11
# S2 H+ Q1 |9 Fiptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 21 -j ACCEPT8 H; I) @8 q7 D' R2 G) {
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 21 -m --state ESTABLISHED -j ACCEPT
: p# m7 e& K$ N/ s' @iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 20 -m --state ESTABLISHED,RELATED -j ACCEPT) k: _2 |- T! _* N  {/ ^
iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 20 -m --state ESTABLISHED -j ACCEPT
2 A2 C$ y  ]" P0 o+ |( {% @& V) E; |' D" ]iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 1024: -m --state ESTABLISHED,RELATED -j ACCEPT
4 {7 M6 n' Y" S2 v, f0 tiptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 1024: -m --state ESTABLISHED -j ACCEPT
4 U- m& |, _) o$ R- l) M/ D+ B# 用SNAT作源地址转换(关键),以使回应包能正确返回& y! _5 J0 H$ b( P; U+ Z8 [+ J1 k5 B
iptables -t nat -A POSTROUTING -d 192.168.1.11 -p tcp --dport 21 -i eth0 -j SNAT --to 192.168.1.1 - M% R: u* B: b0 j) s6 r$ |, g9 o* S3 L* B
- M; Q+ M% y; Z9 H% j
Q:网络环境如上一问题,还在网关上用squid进行透明代理,也作了SNAT了,为什么内网还是不能访问公司的web服务器?iptables如下:- \- l1 i% s6 J: X) N; Z
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128$ n7 Z. v$ J  P4 e5 O# B
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10( ?; A2 e/ K  L  U# {6 ?
iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.1  t! H: r3 I( _4 l/ n, u4 q8 G3 z
A:问题主要在PREROUTING链中REDIRECT和DNAT的顺序,由于先进行了REDIRECT(重定向),则到第二句DNAT时,端口已变为3128,不匹配第二句的目的端口80,DNAT也就不会执行,不能到达正确的目的地。解决的办法有两个:: U* w8 W2 `/ A+ B2 U" O8 u
1、把REDIRECT语句放到DNAT语句的后面,如下:
9 G0 |  `& _0 [0 @, N  `iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10
: b9 f5 z; b7 U, ~! X3 xiptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128
' s" c! `3 y2 X, C" ]: K2、在REDIRECT语句中增加匹配目的地址"-d ! a.b.c.d",如下:* s: N0 A) w9 ~- U
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 31281 h4 E6 C8 P. y/ x3 ?9 w0 {4 M
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-4-6 19:35 , Processed in 0.064441 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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