http://zhangyic.blog.51cto.com/1819414/347575
参考 http://zhangyic.blog.51cto.com/1819414/347575
要点:
1、iptables服务机器必须是网关才行
2、可以用tcpdump查看数据包流向
3、采用SNAT和DNAT同时改动的方式,确实可以实现转发,不过对iptables服务器压力过大,做实验可以。
A、客户端IP :10.0.2.239
B、iptables机器:外网IP:124.42.60.100 内网IP:10.0.0.8
C、目的机器:IP:172.16.1.204
A、B、C在同一个内网环境,但是B不是网关服务器。
任务:A在浏览器直接输入http://124.42.60.100 ,就能访问C上的Web服务。
1、设置B上的iptables服务:
service iptables start #启动iptables服务
echo "1" > /proc/sys/net/ipv4/ip_forward #开启ip转发
iptables -t nat -A PREROUTING -d 124.42.60.100 -j DNAT --to 172.16.1.204
2、设置C上的默认路由规则,使得发往A的数据包必须经过B。
route add -host 10.0.2.239 gw 10.0.0.8
3、测试后通过,如果不设置C上的路由规则,则C会自动把数据包发给A,这个时候A会R (Rest)重置连接。
也即是说A请求B,B转发给C,C必须把数据包返回给B,然后B返回给A才行。
4、既然这样,那么有新想法,就是B同时修改目的地址和源地址:
iptables -t nat -A POSTROUTING -s 10.0.2.239 -j DNAT --to 124.42.60.100
iptables -t nat -A PREROUTING -d 124.42.60.100 -j DNAT --to 172.16.1.204
然后去掉C的路由规则:route del -host 10.0.2.239 gw 10.0.0.8
此时发现,可以访问成功。
查看 :iptables -t nat -L -n
5、为了实现让外网能访问自己的机器web服务,设置了B上的DNAT规则后,需要修改本机的默认网关为B的IP才行。
收获:
1、可以方便的用nc开个端口监听:
nc -l 6666
2、可以采用telent的方式测试数据包发送情况。
telnet 124.42.60.100 6666