직렬 포트가 서로 연결된 두 개의 Raspberry Pi가 있습니다. 나는 둘 사이에 PPP 링크를 설정하고 ICMPV6을 통해 성공적으로 ping을 수행하고 둘 사이에 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