我设置了一个 GRE 隧道、一个思科路由器和一个 Linux 机器,Linux 机器中的隧道接口名为 pic。好吧,我必须通过 Linux 机器转发来自思科的流量。我在 Linux 机器中设置的规则如下:
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -A INPUT -p 47 -j ACCEPT
iptables -A FORWARD -i ppp0 -j ACCEPT
iptables -A FORWARD -i pic -o ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i ppp0 -o pic -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
我看到流量来自隧道并转发到互联网,但没有发送数据包的回复。
我可能会错过类似路由规则的东西。
答案1
假设防火墙中没有任何规则,并且 INPUT、OUTPUT 和 FORWARD 链的默认策略是 ACCEPT,那么您只需要启用 ip 转发和 MASQUERADE 的行就可以工作。
如果防火墙中已经有规则,请将它们发布在这里,iptables --list -v -n
以便iptables -t nat --list -v -n
我们了解整个设置。
简而言之,你应该:
- 启用 IP 转发(与第一行一样)
- 启用 SNAT 或 MASQUERADING(如最后一行所示)
- 在 INPUT 链中允许 gre 协议
- 允许在 FORWARD 链中从 pic 到 ppp0 建立新连接
- 允许在 FORWARD 链中从 ppp0 到 pic 建立 RELATED、ESTABLISHED 连接