我的目标是在 socat 上使用 pppd。我有两个带有 eth0 的 Ubuntu 盒子(物理上)相互连接。我可以 ping 两个 IP 地址。我在每个 Ubuntu 机器上执行以下操作。
- 创建一个伪串行设备并将其链接到我的网络接口“eth0”。
socat PTY,link=/dev/ttyp10 接口:eth0 - 在这个伪串行设备上使用 pppd。
设备 A:
pppd noauth /dev/ttyp10 10.10.10.10:20.20.20.20
设备 B:
pppd noauth /dev/ttyp10 20.20.20.20:10.10.10.10
我看到我的 ppp0 接口在短时间内创建,但我无法 ping 两个 IP 地址(10.10.10.10 或 20.20.20.20)。我知道我的解决方案不完整,因为我需要指定我的 pppd 数据包必须如何从我的 eth0 接口路由但不知道该怎么做(我在 eth0 接口上使用了 tcpdump 并找到了一些数据)。
我通过将 socat 绑定到 TCP 服务器/客户端尝试了相同的实验,它成功了。
设备 A:
1. socat pty,link=/dev/ttyp10,raw,echo=0 TCP4-LISTEN:7001,reuseaddr &
2. pppd noauth /dev/ttyp10 10.10.10.10:20.20.20.20
设备 B:
1. socat pty,link=/dev/ttyp10,raw,echo=0,waitslave TCP4:20.1.1.2:7001 &
2. pppd noauth /dev/ttyp10 20.20.20.20:10.10.10.10
注意:20.1.1.2是设备 A 的“eth0”IP 地址。有了这个,我的 ppp0 接口已启动,我可以 ping 两个 IP 地址(10.10.10.10 和 20.20.20.20)。
当我有一个工作的 eth0 接口时,为什么我需要使用伪串行设备是一个不同的问题,我们不讨论这个问题。