linux - 使用 INTERFACE 选项通过 SOCAT 的 PPPd

标签 linux shell networking socat pppd

我的目标是使用 pppd 而不是 socat。我有两个 eth0 相互连接(物理)的 Ubuntu 盒子。我可以 ping 通这两个 IP 地址。我在每个 Ubuntu 盒子上执行以下操作。

  1. 创建一个伪串行设备并将其链接到我的网络接口(interface)“eth0”。
    socat PTY,link=/dev/ttyp10 INTERFACE:eth0
  2. 在这个伪串行设备上使用 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 接口(interface)创建时间很短,但我无法 ping 两个 IP 地址(10.10.10.10 或 20.20.20.20)。我知道我的解决方案并不完整,因为我需要指定必须如何从我的 eth0 接口(interface)路由我的 pppd 数据包,但不确定该怎么做(我在 eth0 接口(interface)上使用了 tcpdump 并找到了一些数据)。

我通过将 socat 绑定(bind)到 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 接口(interface)就启动了,我可以 ping 两个 IP 地址(10.10.10.10 和 20.20.20.20)。

当我有一个可用的 eth0 接口(interface)时,为什么我需要使用伪串行设备是另一个问题,我们不讨论这个问题。

最佳答案

您可能想要改编取自 socat 手册页的示例:

socat PTY,link=/var/run/ppp,rawer INTERFACE:hdlc0

circumvents the problem that pppd requires a serial device and thus might not be able to work on a synchronous line that is represented by a network device. socat creates a PTY to make pppd happy, binds to the network interface hdlc0, and can transfer data between both devices. Use pppd on device /var/run/ppp then.

在这个例子中,接口(interface)是一条同步线路(被操作系统视为HDLC接口(interface))。 pppd 使用(默认)HLDC-like framing因此将原始数据从 pppd 传输到 HDLC 设备是有意义的。

在您的情况下,您使用的是以太网设备,做同样的事情没有多大意义。

在您的第二个示例中,您设法通过 TCP 传输 PPP session ,这是一个非常简单且可行的选项。您的另一种解决方案是使用 PPPoE专为通过以太网传输 PPP 而设计。

关于linux - 使用 INTERFACE 选项通过 SOCAT 的 PPPd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35998803/

相关文章:

html - 找不到我正在使用的 index.html

linux - 如何配置lsyncd监控文件变化的时间间隔?

php - Virtual Box 中的访问被拒绝

ios - 强制 iOS 设备应用通过本地 WIFI 网络通话

linux - 无法ping通我的虚拟机(Mac)

linux - ] 命令 & 命令 > [忽略输出]

json - 有没有办法读取JSON文件中的所有键值对,然后在shell中相应地初始化所有变量?

shell - 通过ssh传递环境变量以进行远程扩展

c# - 使用 shell 命令从 C# 程序中下载 MySQL 表是否合适?

linux - 以零负载发送的 skbuff 数据包