3

私の目的は、socat で pppd を使用することです。eth0 が (物理的に) 相互に接続された 2 つの Ubuntu ボックスがあります。両方の IP アドレスに ping を実行できます。各Ubuntuボックスで以下を行います。

  1. 疑似シリアル デバイスを作成し、ネットワーク インターフェイス「eth0」にリンクします。
    socat PTY,link=/dev/ttyp10 インターフェース: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 インターフェースが短時間作成されるのを確認しましたが、両方の IP アドレス (10.10.10.10 または 20.20.20.20) に対して ping を実行できません。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 インターフェイスがアップし、両方の IP アドレス (10.10.10.10 と 20.20.20.20) に ping を実行できます。

動作している eth0 インターフェイスがあるのに、なぜ疑似シリアル デバイスを使用する必要があるのか​​は別の問題であり、それについては説明しません。

4

1 に答える 1

3

socatおそらく、 man ページから取ったこの例を適応させたいと思うでしょう:

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

pppd がシリアルデバイスを必要とするため、ネットワークデバイスによって表される同期回線で動作できない可能性があるという問題を回避します。socat は PTY を作成して pppd を満足させ、ネットワーク インターフェイス hdlc0 にバインドし、両方のデバイス間でデータを転送できます。次に、デバイス /var/run/ppp で pppd を使用します。

この例では、インターフェイスは同期回線です (OS からは HDLC インターフェイスとして認識されます)。pppdは (デフォルトで) HLDC のようなフレーミングpppdを使用するため、生データをHDLC デバイスにパイプすることは理にかなっています。

あなたの場合、イーサネットデバイスを使用していますが、これは同じことをする意味がありません。

2 番目の例では、非常に単純で実行可能なオプションである TCP 経由で PPP セッションを転送することができました。あなたの場合の別の解決策は、イーサネット経由で PPP を転送するために設計されたPPPoEを使用することです。

于 2016-03-15T08:58:00.750 に答える