Ipv6

將 pppd 配置為接受來自遠端對等方的鏈路本地 IPv6 地址

  • February 19, 2021

我有兩個 Raspberry Pi,它們的串列埠相互連接。我已經在它們兩者之間建立了一個 PPP 連結,並成功地 ICMPV6 ping 並打開了它們之間的 TCP 套接字。但我不知道如何讓“客戶端”pppd 接受“伺服器”pppd 提供的連結本地 IPv6 地址。我正在嘗試使用靜態地址,因此我知道遠端對等方的連結本地 IP 地址。

在我正在執行的“伺服器”上:

pppd file ./ppp-options ipv6 ::1,::2 /dev/ttyAMA0 115200

在“客戶端”上,我正在執行:

pppd file ./ppp-options ipv6cp-accept-local /dev/ttyAMA0 115200

但是,該ipv6cp-accept-local選項似乎不像手冊頁所描述的那樣工作:

使用此選項,pppd 將接受對等方關於我們本地 IPv6 介面標識符的想法,即使在選項中指定了本地 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 。

答案原來是 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

引用自:https://unix.stackexchange.com/questions/634033