找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 13645|回复: 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 p  i1 t/ T$ IA:# web
) |$ b" M2 U$ m" c( {# 用DNAT作端口映射
* I% H9 r* Y0 \7 f% c( [iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10: |4 O; Z3 H. C  d; z% P: }2 @
# 用SNAT作源地址转换(关键),以使回应包能正确返回
/ K6 s; i. G7 v/ hiptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.1
/ i# M2 y' C4 O8 w( I# 一些人经常忘了打开FORWARD链的相关端口,特此增加/ z5 Q: W- Z% J8 v
iptables -A FORWARD -o eth0 -d 192.168.1.10 -p tcp --dport 80 -j ACCEPT
8 `/ s( K1 j# Miptables -A FORWARD -i eth0 -s 192.168.1.10 -p tcp --sport 80 -m --state ESTABLISHED -j ACCEPT
6 b0 r4 ?% b  v; W$ _+ H
' T, B6 S/ s: F5 ]# ftp
) j! ]7 [+ u' a" j, u, Imodprobe ip_nat_ftp ###加载ip_nat_ftp模块(若没有编译进内核),以使ftp能被正确NAT0 M. }5 z+ ]6 ^3 Q6 k
modprobe ip_conntrack_ftp ###加载ip_conntrack_ftp模块
/ u$ U2 Z4 A3 F* g+ v# 用DNAT作端口映射
7 p; t6 Y& |( }% H+ e) k0 V% Riptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 21 -j DNAT --to 192.168.1.11/ U6 t, W# U/ u
iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 21 -j ACCEPT) Y- y3 S8 k8 U. i: H
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 21 -m --state ESTABLISHED -j ACCEPT3 Z3 {: @7 v- P; M# @
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 20 -m --state ESTABLISHED,RELATED -j ACCEPT
- f/ z/ o. W" ?3 A, e6 i! q' v" kiptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 20 -m --state ESTABLISHED -j ACCEPT
; j8 M% M3 N; }1 Giptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 1024: -m --state ESTABLISHED,RELATED -j ACCEPT
& P, D8 P% q4 J" }( {iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 1024: -m --state ESTABLISHED -j ACCEPT& K; ?, G+ O2 k6 N6 R
# 用SNAT作源地址转换(关键),以使回应包能正确返回
: Q1 m, @& K/ q/ p! Jiptables -t nat -A POSTROUTING -d 192.168.1.11 -p tcp --dport 21 -i eth0 -j SNAT --to 192.168.1.1 ; V( D6 `: V  K
, u' Q3 T8 d: `- C: C; R5 ~4 k( b
Q:网络环境如上一问题,还在网关上用squid进行透明代理,也作了SNAT了,为什么内网还是不能访问公司的web服务器?iptables如下:
& R3 c3 n  f/ B4 r# [8 miptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128
, D1 ]. K, E' W9 Q+ a% q4 niptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10, q  L( M1 p# ?& P( u
iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.1
6 }$ b( A6 _5 I3 mA:问题主要在PREROUTING链中REDIRECT和DNAT的顺序,由于先进行了REDIRECT(重定向),则到第二句DNAT时,端口已变为3128,不匹配第二句的目的端口80,DNAT也就不会执行,不能到达正确的目的地。解决的办法有两个:% g1 f- O! C- L# i' V6 X! r
1、把REDIRECT语句放到DNAT语句的后面,如下:, Y* C, ~/ C; E( O0 y2 H2 f' C
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10
' z+ F4 M2 C. k1 y8 `iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 31288 T, G. d2 j7 u0 H5 e
2、在REDIRECT语句中增加匹配目的地址"-d ! a.b.c.d",如下:1 I. e9 [/ `* h. S! l6 P
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 31283 G* G( F+ l' G. }1 ?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-11 06:52 , Processed in 0.042927 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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