使用 iptables NAT 转发 GRE 隧道

使用 iptables NAT 转发 GRE 隧道

我有两台主机,它们之间需要建立 GRE 隧道。在两台主机之间,我有一台中继主机,它需要执行 NAT 并向任一方向转发 GRE 流量。

grehostA --- natrelayhost --- grehostB

所有主机都运行 Debian。为了便于解释,我将只讨论从 到grehostA的流量grehostB,而不考虑返回流量。我们正在查看 的 iptables 配置natrelayhost

-t nat -A PREROUTING -p gre -s grehostA -d natrelayhost -j LOG --log-prefix "[netfilter] GRE-PRE: "
-t nat -A PREROUTING -p gre -s grehostA -d natrelayhost -j DNAT --to-destination grehostB

-t nat -A POSTROUTING -p gre -j LOG --log-prefix "[netfilter] GRE-POST: "
-t nat -A POSTROUTING -p gre ! -s natrelayhost -j MASQUERADE

-A FORWARD -p gre -j LOG --log-prefix "[netfilter] GRE-FWD: "
-A FORWARD -p gre -J ACCEPT

我也有INPUT调试规则,尽管我认为我不需要这些:

-A INPUT -p gre -j LOG --log-prefix "[netfilter] GRE-IN: "
-A INPUT -p gre -j ACCEPT

而且当然,sysctl -w net.ipv4.ip_forward=1

我已加载以下内核模块:

modprobe nf_conntrack_proto_gre
modprobe nf_nat_proto_gre

还有一些我认为不需要但仍然决定尝试的其他内核模块:

modprobe ip_gre
modprobe ip_conntrack_pptp
modprobe ip_nat_pptp

问题:

当流量从我发送时,grehostA我会收到GRE-PRE日志消息,显示 DNAT 规则已执行。但我没有收到任何GRE-POST/ GRE-FWD/GRE-IN日志消息,即使POSTROUTING/ FORWARD/INPUT链设置为记录和传递所有 GRE 流量。似乎没有一个通过它们。在 DNAT 之后,我希望在这里看到数据包。

我尝试在各自的链顶部添加规则,以确保没有其他规则首先接受或拒绝流量,但这没有什么区别。

请记住,一旦我真正让它发挥作用,我将在规则中添加进一步的源/目标主机检查,以防止未经授权的访问。

natrelayhost编辑:通过添加主机路由修复grehostB。谢谢 Tomek!

相关内容