【发布时间】:2016-03-14 21:53:16
【问题描述】:
我的目标是使用 pppd 而不是 socat。我有两个带有 eth0 的 Ubuntu 盒子(物理上)相互连接。我可以 ping 两个 IP 地址。我在每个 Ubuntu 机器上执行以下操作。
- 创建一个伪串行设备并将其链接到我的网络接口“eth0”。
socat PTY,link=/dev/ttyp10 INTERFACE: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 接口时为什么我需要使用伪串行设备是一个不同的问题,我们不讨论这个问题。
【问题讨论】:
-
你想要实现的协议栈是什么?
-
@ysdx 我想通过 PPP 发送 IP,但由于 PPP 需要一个串行端口,所以我使用 SOCAT 来弥补这个差距。希望我已经回答了你的问题。
标签: linux shell networking socat pppd