我有一台机器通过永久 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,在浏览器中打开一个网页,隧道再次被激活。作为一种解决方法,我现在使用启动 curl 到 Internet 页面的 cron 脚本。
请帮助我了解导致隧道停止运行的原因,并告诉我可以做些什么来替换 curl hack。
您可能会遇到 conntrack 超时问题。我不知道是不是这样,看来您的规则不使用 conntrack 就足够了,但无论如何,您可能希望在隧道中保留一些流量以使其保持畅通。您不需要使用 curl 加载网页,一个简单的 ping 就足够了。
如果您想尝试更大的 conntrack 超时,请尝试以下操作:
其他一般注意事项:
-i <eth>
向 PREROUTING 规则添加一个参数,-o <eth>
向 POSTROUTING 规则添加一个参数通常是一种很好的做法。避免规则失灵并减少防火墙的负载。可能是您有一个动态或共享 IP,或者它是由您的 ISP 重新分配的?
如果是这种情况,我担心您必须保留类似的技巧