找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15574|回复: 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能使内外网都能访问公司的服务器?
* O; U* d0 V3 P! A7 ~A:# web
+ v7 [; \2 w9 W8 C# 用DNAT作端口映射* o8 K# r9 x3 m$ v+ M  _0 r0 g
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.101 p- f! Q7 g; y) t
# 用SNAT作源地址转换(关键),以使回应包能正确返回
$ x8 h6 B3 D( D3 L+ u$ o7 Tiptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.1
6 {6 y1 S/ m$ j( p8 {; a# 一些人经常忘了打开FORWARD链的相关端口,特此增加( v1 d  i! _  D# `& w# I2 N
iptables -A FORWARD -o eth0 -d 192.168.1.10 -p tcp --dport 80 -j ACCEPT
$ a4 C7 f1 _+ Jiptables -A FORWARD -i eth0 -s 192.168.1.10 -p tcp --sport 80 -m --state ESTABLISHED -j ACCEPT
) T! z! ~7 g  v0 l2 w
  u$ y" [4 \0 O# ftp
) o) p: W, @( E! S1 Xmodprobe ip_nat_ftp ###加载ip_nat_ftp模块(若没有编译进内核),以使ftp能被正确NAT
/ f: Y6 G- R) K4 Smodprobe ip_conntrack_ftp ###加载ip_conntrack_ftp模块
! n) P% c# ^0 @3 Q3 x# 用DNAT作端口映射, d% K# U+ O3 j3 l
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 21 -j DNAT --to 192.168.1.11
* o* R, N# a. Z2 yiptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 21 -j ACCEPT
; r1 r6 d! E, j' Q1 @) d' [iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 21 -m --state ESTABLISHED -j ACCEPT2 Q7 z+ q, B/ P$ R
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 20 -m --state ESTABLISHED,RELATED -j ACCEPT
# ?0 c1 |$ y) b  V: i- liptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 20 -m --state ESTABLISHED -j ACCEPT
; D& n& S5 \$ E& `" diptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 1024: -m --state ESTABLISHED,RELATED -j ACCEPT6 t! M/ h- z/ l, S0 D; Y, U7 f! T& M
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 1024: -m --state ESTABLISHED -j ACCEPT
" A% D6 M/ `7 E+ n5 X/ q. m7 Z# 用SNAT作源地址转换(关键),以使回应包能正确返回* v2 {- a4 h+ u% J
iptables -t nat -A POSTROUTING -d 192.168.1.11 -p tcp --dport 21 -i eth0 -j SNAT --to 192.168.1.1
0 B4 T. V! R" @; _# n/ y6 K  r) j* W8 c/ T$ _; L& q) T) o9 z8 S! i5 ?  S% _
Q:网络环境如上一问题,还在网关上用squid进行透明代理,也作了SNAT了,为什么内网还是不能访问公司的web服务器?iptables如下:+ R. S& E$ P9 W4 t2 J- ^  s' h
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128
# A$ T- j6 g* q* F, ]iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10- _4 \. y( V/ x& U# K- @/ E
iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.1
* X" o1 X+ J3 W- {# k( NA:问题主要在PREROUTING链中REDIRECT和DNAT的顺序,由于先进行了REDIRECT(重定向),则到第二句DNAT时,端口已变为3128,不匹配第二句的目的端口80,DNAT也就不会执行,不能到达正确的目的地。解决的办法有两个:$ w+ b. A5 s$ g  q5 w
1、把REDIRECT语句放到DNAT语句的后面,如下:$ l: U6 ]) ?1 w4 N1 ]
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10
* f* N. i7 k9 Miptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128
2 }8 k; g3 c) E9 P2、在REDIRECT语句中增加匹配目的地址"-d ! a.b.c.d",如下:9 a% Y- @5 U5 g% r  A: ]
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, _' d) Y: Y, [
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-8-6 02:45 , Processed in 0.046562 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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