桥接 PPPoS 与以太网

桥接 PPPoS 与以太网

我的测试台上有一台 PC,有 2 个接口:enp2s0 和 enp3s0。 IP 是公共的,并根据接口 MAC 通过 DHCP 获得。我的工作台上有第二台计算机,即 Raspberry Pi 计算模块 3,我想将其发布到互联网上。 RPi 和台式服务器通过 PPP 和串行连接连接在一起。两侧的 ppp 接口称为 ppp0。

如何桥接 ppp0 和 enp3s0,以便从公共 IP 访问 RPi CM3+?我迷失在 Linux 的众多桥接和隧道选项中......

当前配置框图

我的组织不允许我进行路由或使用交换机。任何能够最大限度地减少我破坏网络其余部分的机会的解决方案都会很棒。

答案1

无需第三个公共 IP 或 VPN,我就能实现我想要的目标。

我使用具有广泛规则的 DNAT 和 SNAT。许多来源建议使用 MASQUERADE,但如果有多个面向互联网的接口可用,则度量较低的接口将同时获得本地和 PPP 流量并中断路由。 MASQUERADE 不允许指定特定的源 IP,但 SNAT 可以。

我添加了以下 iptables 规则:

-A FORWARD -i enp3s0 -o ppp0 -j ACCEPT
-A FORWARD -i ppp0 -o enp3s0 -j ACCEPT
-t nat -A PREROUTING -i enp3s0 -j DNAT --to-destination 10.0.5.2
-t nat -A POSTROUTING -s 10.0.5.2 -j SNAT --to-source <enp3s0's ip>

IP转发已启用:

echo 1 > /proc/sys/net/ipv4/ip_forward

理想情况下,脚本可以在 DHCP 配置之后配置 SNAT 规则源 ip。在我的例子中,ip 是无限期归属的,所以静态规则就可以了。

编辑:在 dirkt 的建议并在错误的接口上捕获一些传出数据包后,我添加了一个新的网络命名空间。打开界面的完整脚本现在是:

ip netns add bridged
ip link set enp3s0 netns bridged
ip netns exec bridged ip link set dev enp3s0 up
ip netns exec bridged dhclient enp3s0

ip netns exec bridged iptables -A FORWARD -i enp3s0 -o ppp0 -j ACCEPT
ip netns exec bridged iptables -A FORWARD -i ppp0 -o enp3s0 -j ACCEPT
ip netns exec bridged iptables -t nat -A PREROUTING -i enp3s0 -j DNAT --to-destination 10.0.5.2
ip netns exec bridged iptables -t nat -A POSTROUTING -s 10.0.5.2 -j SNAT --to-source [my internet ip]
ip netns exec bridged echo 1 > /proc/sys/net/ipv4/ip_forward

stty -F /dev/ttyUSB1 raw
stty -F /dev/ttyUSB1 1000000
ip netns exec bridged pppd /dev/ttyUSB1 1000000 10.0.5.1:10.0.5.2 local noauth debug nodetach dump nocrtscts passive persist maxfail 0 holdoff 1

我不确定为什么 DHCP 默认情况下不在新命名空间中运行,但现在只需调用 dhclient 一次就可以了。

防火墙仅在命名空间中关闭:

sudo ip netns exec bridged ufw disable

答案2

IP 是公共的,并根据接口 MAC 通过 DHCP 获得。

这意味着桥接时,ppp 接口需要获得通过 DHCP 获得的第三个公共 IP。这不适用于 ppp。

桥接ppp0

即使 ppp0 不需要公共 IP,它也是一个点对点连接,顾名思义。所以你无法弥合它。

以便可以从公共 IP 访问 RPi CM3+?

最简单的方法是在 Bench PIC 上启用转发,在任一外部 NIC 上启用 NAT ppp0,并添加端口转发规则。 (谷歌,有数百个教程)。这意味着一些RPi 上的端口可以在给定的外部 IP 下进行访问,也可能在不同的端口号下进行访问。并且Rpi可以访问全部互联网的。如果 Rpi 上运行着已知数量的需要访问的服务,那么这将起作用。

如果 RPI要拥有第三个公共 IP,请在 ppp0 连接之上添加可桥接的 VPN(这将导致额外的开销),然后桥接生成的 tun/tap 接口。

相关内容