シリアルポートが互いに接続されている2つのRaspberry Piがあります。私は2つの間にPPPリンクを確立し、ICMPV6を介して正常にpingを実行し、2つの間にTCPソケットを開きました。しかし、「サーバー」pppdが提供するリンクローカルIPv6アドレスを「クライアント」pppdが受け入れる方法はわかりません。リモートピアのリンクローカルIPアドレスを知るために固定アドレスを使用してみました。
「サーバー」では、私は以下を実行しています。
pppd file ./ppp-options ipv6 ::1,::2 /dev/ttyAMA0 115200
「クライアント」で以下を実行しています。
pppd file ./ppp-options ipv6cp-accept-local /dev/ttyAMA0 115200
しかし、そのipv6cp-accept-local
オプションはうまくいかないようですマニュアルページ説明する:
このオプションを使用すると、ローカル IPv6 インターフェイス識別子がオプションで指定されていても、pppd はローカル IPv6 インターフェイス識別子に対するピアのアイデアを受け入れます。
「クライアント」コンピュータは、ランダムに割り当てられたリンク - ローカルアドレスを使用します。
Using interface ppp0
Connect: ppp0 <--> /dev/ttyAMA0
Deflate (15) compression enabled
local LL address fe80::fd28:565e:1186:02ff
remote LL address fe80::0000:0000:0000:0001
クライアントがデバッグをオンにした後の完全な出力は次のとおりです。 https://gist.github.com/njh/ab3282f43c72dcf6932b3693eb7dfca4
私の設定ファイルは次のとおりです(両方に使用されます)。
nodetach
noauth
persist
local
noip
+ipv6
私はRaspberry Pi OSを実行しており、pppdバージョンがあります。2.4.7両方のデバイスにインストールされます。
答え1
答えは、Linux用のpppdバージョン2.4.7にバグがあることです。
解決策は簡単です。バージョンをアップグレードするだけです。2.4.9「サーバー」のインターフェース識別子を受け入れるために「クライアント」を正常に取得しました。
以下はクライアントのデバッグ出力です。
$ sudo pppd file ./ppp-options ipv6cp-accept-local /dev/ttyAMA0 115200
using channel 368
Using interface ppp0
Connect: ppp0 <--> /dev/ttyAMA0
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x7f793cbe>]
rcvd [LCP ConfReq id=0xb <asyncmap 0x0> <magic 0xecde7250>]
sent [LCP ConfAck id=0xb <asyncmap 0x0> <magic 0xecde7250>]
rcvd [LCP ConfReq id=0xb <asyncmap 0x0> <magic 0xecde7250>]
sent [LCP ConfAck id=0xb <asyncmap 0x0> <magic 0xecde7250>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x7f793cbe>]
sent [LCP EchoReq id=0x0 magic=0x7f793cbe]
sent [IPV6CP ConfReq id=0x1 <addr fe80::0dfd:3c3b:e130:91ce>]
rcvd [LCP EchoReq id=0x0 magic=0xecde7250]
sent [LCP EchoRep id=0x0 magic=0x7f793cbe]
rcvd [LCP EchoRep id=0x0 magic=0xecde7250]
rcvd [IPV6CP ConfReq id=0xb <addr fe80::0000:0000:0000:0001>]
sent [IPV6CP ConfAck id=0xb <addr fe80::0000:0000:0000:0001>]
rcvd [IPV6CP ConfNak id=0x1 <addr fe80::0000:0000:0000:0002>]
sent [IPV6CP ConfReq id=0x2 <addr fe80::0000:0000:0000:0002>]
rcvd [IPV6CP ConfAck id=0x2 <addr fe80::0000:0000:0000:0002>]
local LL address fe80::0000:0000:0000:0002
remote LL address fe80::0000:0000:0000:0001
Script /etc/ppp/ipv6-up started (pid 7049)
Script /etc/ppp/ipv6-up finished (pid 7049), status = 0x0