GRE(IP协议47)NAT规则似乎过期

我有一台机器通过永久的GRE隧道连接到另一台主机。 我已经把机器放在Linux防火墙(Smoothwall)后面,并且使用以下规则将所有的GRE数据包进行NAT转换:

/sbin/iptables -t nat -A PREROUTING -p 47 --src $tunnel_server_ip -j DNAT --to-destination $false_ip /sbin/iptables -t nat -A POSTROUTING -p 47 --src $false_ip -j SNAT --to-source $real_ip /sbin/iptables -t nat -A INPUT -p 47 -j ACCEPT 

(请参阅Linux路由器上的NAT GRE(IP协议47) )

这一切工作正常,但经过一段时间的隧道约15分钟,我不能连接到互联网上隧道机器。 在我将任何数据包从机器发送到互联网之后,ping,在浏览器中打开一个网页,隧道再次被激活。 作为一种解决方法,我现在使用一个cron脚本,开始curl到互联网上的页面。

请帮助我了解导致隧道停止运作的原因,并告诉我如何更换curl黑客。

conntrack超时可能会有问题。 我不知道是不是这样的情况,看来你的规则就足够了,而不用使用conntrack,但无论如何,你可能想保留一些stream量在隧道中保持打开状态。 你不需要使用curl加载一个网页,一个简单的ping就足够了。

如果你想尝试更大的conntrack超时,试试这个:

 sysctl net.netfilter.nf_conntrack_generic_timeout=7200 sysctl net.ipv4.netfilter.ip_conntrack_generic_timeout=7200 

其他一般说明:

  • 向PREROUTING规则中添加-i <eth>参数以及向POSTROUTING规则中添加-o <eth>参数通常是一种很好的做法。 避免规则失火并减less对防火墙的负载。
  • INPUT链规则是无用的。 另外,在nat表中使用ACCEPT目标是没有意义的。 也许你正在寻找的是在filter(默认)表的FORWARD链中的类似规则。

也许你有一个dynamic或共享的IP或它是由您的ISP重新分配?

如果是这种情况,我担心你必须保持类似的黑客行为