Iptables 完成端口映射

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能使内外网都能访问公司的服务器?
A:#  web
用DNAT作端口映射
iptables  -t  nat  -A  PREROUTING  -d  a.b.c.d  -p  tcp  --dport  80  -j  DNAT  --to  192.168.1.10
用SNAT作源地址转换(关键),以使回应包能正确返回
iptables  -t  nat  -A  POSTROUTING  -d  192.168.1.10  -p  tcp  --dport  80  -j  SNAT  --to  192.168.1.1
一些人经常忘了打开FORWARD链的相关端口,特此增加
iptables  -A  FORWARD  -o  eth0  -d  192.168.1.10  -p  tcp  --dport  80  -j  ACCEPT
iptables  -A  FORWARD  -i  eth0  -s  192.168.1.10  -p  tcp  --sport  80  -m  --state  ESTABLISHED  -j  ACCEPT

ftp
modprobe  ip_nat_ftp  ###加载ip_nat_ftp模块(若没有编译进内核),以使ftp能被正确NAT
modprobe  ip_conntrack_ftp  ###加载ip_conntrack_ftp模块
用DNAT作端口映射
iptables  -t  nat  -A  PREROUTING  -d  a.b.c.d  -p  tcp  --dport  21  -j  DNAT  --to  192.168.1.11
iptables  -A  FORWARD  -o  eth0  -d  192.168.1.11  -p  tcp  --dport  21  -j  ACCEPT
iptables  -A  FORWARD  -i  eth0  -s  192.168.1.11  -p  tcp  --sport  21  -m  --state  ESTABLISHED  -j  ACCEPT
iptables  -A  FORWARD  -i  eth0  -s  192.168.1.11  -p  tcp  --sport  20  -m  --state  ESTABLISHED,RELATED  -j  ACCEPT
iptables  -A  FORWARD  -o  eth0  -d  192.168.1.11  -p  tcp  --dport  20  -m  --state  ESTABLISHED  -j  ACCEPT
iptables  -A  FORWARD  -o  eth0  -d  192.168.1.11  -p  tcp  --dport  1024:  -m  --state  ESTABLISHED,RELATED  -j  ACCEPT
iptables  -A  FORWARD  -i  eth0  -s  192.168.1.11  -p  tcp  --sport  1024:  -m  --state  ESTABLISHED  -j  ACCEPT
用SNAT作源地址转换(关键),以使回应包能正确返回
iptables  -t  nat  -A  POSTROUTING  -d  192.168.1.11  -p  tcp  --dport  21  -i  eth0  -j  SNAT  --to  192.168.1.1 

Q:网络环境如上一问题,还在网关上用squid进行透明代理,也作了SNAT了,为什么内网还是不能访问公司的web服务器?iptables如下:
iptables  -t  nat  -A  PREROUTING  -s  192.168.1.0/24  -p  tcp  --dport  80  -i  eth0  -j  REDIRECT  --to  3128
iptables  -t  nat  -A  PREROUTING  -d  a.b.c.d  -p  tcp  --dport  80  -j  DNAT  --to  192.168.1.10
iptables  -t  nat  -A  POSTROUTING  -d  192.168.1.10  -p  tcp  --dport  80  -j  SNAT  --to  192.168.1.1
A:问题主要在PREROUTING链中REDIRECT和DNAT的顺序,由于先进行了REDIRECT(重定向),则到第二句DNAT时,端口已变为3128,不匹配第二句的目的端口80,DNAT也就不会执行,不能到达正确的目的地。解决的办法有两个:
1、把REDIRECT语句放到DNAT语句的后面,如下:
iptables  -t  nat  -A  PREROUTING  -d  a.b.c.d  -p  tcp  --dport  80  -j  DNAT  --to  192.168.1.10
iptables  -t  nat  -A  PREROUTING  -s  192.168.1.0/24  -p  tcp  --dport  80  -i  eth0  -j  REDIRECT  --to  3128
2、在REDIRECT语句中增加匹配目的地址"-d  a.b.c.d",如下:
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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值