我有一个主机有一个永久静态GRE隧道到互联网上的服务器。 现在主机有自己的真实IP地址。 我想把主机放在一个Linux盒子(Smoothwall)后面,并为其分配一个私有IP地址。
让我们打电话:
tunnel-server-ip =主机连接的隧道末端的IP(在Internet上)
real-ip =主机当前使用的真实IP,我想要分配给Linux路由器
false-ip =将主机置于Linux防火墙之后的IP地址
这就是我认为我必须为隧道工作所做的事情:
我想出了以下脚本:
tunnel_server_ip=217.xxx false_ip=192.168.2.2 real_ip=82.xxx /sbin/iptables -A PREROUTING -p 47 --src $tunnel_server_ip -j DNAT --to-destination $false_ip /sbin/iptables -A POSTROUTING -p 47 --src $false_ip -j SNAT --to-source $real_ip /sbin/iptables -A INPUT -p 47 -j ACCEPT
运行这个结果将导致无链/目标/匹配的名称。 你能告诉我我做错了什么吗? 我在正确的轨道上?
PREROUTING / POSTROUTING指令中忘记了-t nat表开关。 只需在前面添加它。
迟到的答案,但我碰到了相同的需求,下面的两个命令做的伎俩:
# iptables -t nat -A PREROUTING -i eth0 -p gre -j DNAT --to-destination 192.168.0.1 # modprobe nf_conntrack_proto_gre
不需要指定真实IP,只需将grestream量提供给私有服务器,并让gre连接跟踪器完成其工作。
对于大多数GRE隧道,你必须在TCP 1723上有一个控制协议。这也必须被转发。 这是描述iptablesconfiguration的链接 。 你在正确的轨道上,只是缺less控制协议。
你似乎忘了说“–table nat”,所以它进入了没有SNAT / DNAT目标的过滤表,也没有PREROUTING和POSTROUTING链。