海运的博客

SNAT不实时生效

发布时间:November 12, 2015 // 分类:Iptables // No Comments

最近一项目频繁创建多网卡接口SNAT,发现在部分在SNAT规则后并不实时生效,如果持续尝试连接指定连接会一直不生效,停止后过段时间或测试其它连接就正常了,原因是:
Linux的NAT不能及时生效,因为它是基于ip_conntrack的,如果在NAT的iptables规则添加之前,此流的数据包已经绑定了一个ip_conntrack,那么该NAT规则就不会生效,直到此ip_conntrack过期,如果一直有数据在鲁莽地尝试传输,那么就会陷入僵持状态。
http://blog.csdn.net/dog250/article/details/17654157

Iptables实现公网IP DNAT/SNAT

发布时间:June 13, 2013 // 分类:Iptables // No Comments

Iptables实现NAT是最基本的功能,大部分家用路由都是基于其SNAT方式上网,使用Iptables实现外网DNAT也很简单,不过经常会出现不能正常NAT的现象。
以下命令将客户端访问1.1.1.1的HTTP数据DNAT到2.2.2.2,很多人往往只做这一步,然后测试不能正常连接。

iptables -t nat -A PREROUTING -p tcp -d 1.1.1.1 --dport 80 -j DNAT --to 2.2.2.2:80

想像一下此时客户端访问1.1.1.1的数据流程:

客户端访问1.1.1.1
1.1.1.1根据Iptables DNA将数据包发往2.2.2.2,此时源IP为客户端IP
2.2.2.2处理后根据源IP直接向客户端返回数据,要知道此时客户端是直接和1.1.1.1连接的
然后呢,客户端不知所云,不能正常连接

最后还要添加一条SNAT规则,将发到2.2.2.2的数据包SNAT,1.1.1.1充当代理服务器的角色。

iptables -t nat -A POSTROUTING -d 2.2.2.2 -j SNAT --to-source 1.1.1.1

别忘记开启内核转发功能:

echo 1 > /proc/sys/net/ipv4/ip_forward
分类
最新文章
最近回复
  • crowjin: 你确定这能过滤??不是所有请求都返回空地址::?
  • : linux系统上单个网卡多条宽带拨号获取公网IP,外网可以访问这些IP,有偿! Q:25299...
  • 硅谷少年: 非常有用,感谢分享
  • spartan2: https://dashboard.hcaptcha.com/welcome_accessib...
  • 海运: 应该能,在购买页面先手工跳过cf机器验证,后续一定时间内不更换ip应该不会再次验证。
  • spartan: 大佬斯巴达开启了CF的机器识别验证,请问插件能自动跳过吗? 另外这个脚本有没有简单使用说明,新...
  • vincent: 膜拜大佬
  • 海运: proxy-header或proxy_protocol
  • liangjw: 如果是 内部调用 或者 中间存在 代理 而上一个代理又在内网 ,那怎么处理来自代理私有IP?
  • chainofhonor: 感谢,用dnsmasq设置自动判断BIOS和UEFI成功了