用DNAT实现外网访问内网web服务

 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

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值