
내 질문은 다음과 관련이 있습니다.이것질문이지만 거의 차이가 없습니다.
기본 인터페이스에 단일 IPv4가 있는 Ubuntu vps가 있습니다. 이 시스템에 서로 다른 끝점 주소를 가진 두 개의 서로 다른 공급자가 제공하는 두 개의 별도 IPv6 터널을 갖고 싶습니다. 혼자서 그 중 하나를 시도해 볼 때. 모든 것이 괜찮습니다. 하지만 두 번째 터널을 추가하면 첫 번째 터널은 여전히 작동하지만 두 번째 터널은 외부에서 핑할 수 없습니다. 그러나 자체 및 게이트웨이에 대해 ping을 수행할 수 있습니다.
내 항목에 다음 줄을 추가합니다 /etc/network/interfaces
.
auto he-ipv6
iface he-ipv6 inet6 v4tunnel
address 2001:xxx:xxx:xxxx::2
netmask 64
endpoint xx.xx.xx.xx
local yy.yy.yyy.yy
ttl 255
gateway 2001:xxx:xxx:xxxx::1
auto sbtb-ipv6
iface sbtb-ipv6 inet6 v4tunnel
address 2a09:xxx:xxx:xxxx::2
netmask 64
endpoint zz.zz.zz.zz
local yy.yy.yyy.yy
ttl 255
gateway 2a09:xxx:xxx:xxxx::1
문제가 어디에 있는지 또는 어떻게 추가로 문제를 해결할 수 있는지 아는 사람이 있습니까?
답변1
몇 가지 참고 사항
이외의 네트워크 구성 도구의 경우 ifupdown
실제로 v4tunnel
는 레이어 3입니다.앉다ip tunnel add FOO mode sit ...
또는 와 동등한 도구를 사용하여 생성할 수 있는 터널입니다 ip link add name FOO type sit ...
.
레이어 3 인터페이스에는 레이어 2 주소(이더넷 MAC 주소 없음)가 없으므로 기본 레이어 2의 주소를 확인할 필요가 없습니다. 레이어 3 인터페이스에서는 ARP(IPv4) 및 NDP(IPv6)가 발생하지 않습니다. . 같은 이유로 확인할 게이트웨이가 없습니다. 게이트웨이 속성에는 게이트웨이가 필요하지 않지만 구문을 사용하면 인터페이스를 지정하지 않고 라우팅 테이블 항목을 생성할 때 사용할 인터페이스를 추측할 수 있으며 일반적으로 다음과 같은 작업이 수행됩니다.터널 브로커의 자체 구성 예. 결국 OP 설정을 위해 /64 넷마스크와 게이트웨이를 사용하는 것은 어디에도 필요하지 않습니다. 그러나 이 답변은 여전히 이러한 설정을 고수하므로 독자가 이러한 모든 설정이 필수가 되는 레이어 2 인터페이스 터널에 적용하기가 더 쉬워집니다. 마찬가지로 일반적으로 기본이 아닌 인터페이스(여기 sbtb-ipv6
)에 대한 설정만 필요하지만 어쨌든 두 인터페이스에 대한 설정을 제공합니다. 남은 유일한 차이점은 어떤 인터페이스가 기본 라우팅 테이블에서 기본 경로를 얻는가입니다.
멀티호밍 및 정책 라우팅
이것은 이제 다음과 같은 경우입니다.다중 주소를 사용하는 멀티호밍 시스템각각은 (IPv6) 인터넷에 도달하기 위한 자체 경로를 가지고 있습니다. 업스트림 라우터는 가장 확실하게 구현합니다.엄격한 역방향 경로 전달스푸핑 방지를 위한 (SRPF): 각 소스 주소는 전용 경로를 통해 전송되어야 합니다. 단순 라우팅에서는 하나의 기본 경로만 사용됩니다(첫 번째 표시). 더 긴 메트릭을 가진 두 번째 기본 경로를 추가하는 것이 가능하지만 더 짧은 메트릭을 가진 경로가 사라질 때까지는 선택되지 않습니다.
이를 극복하기 위해 다음을 사용할 수 있습니다.정책 라우팅. 이를 통해 시스템은 경로를 찾기 위해 대상을 사용하는 대신 추가 선택기를 사용하여 이러한 라우팅 테이블을 선택하는 다른 라우팅 테이블(다른 경로로 채워짐)과 라우팅 규칙을 선택할 수 있습니다. 여기서 유용한 것은 소스 주소입니다(몇 가지 경우에는 이 인터페이스가 강제로 실행될 때 나가는 인터페이스도 있습니다).SO_BINDTODEVICE
).
따라서 목표는 기본 라우팅 테이블의 항목을 기반으로 경로의 부분 보기가 있는 여러 개의 대체 라우팅 테이블을 만드는 것입니다. 각 라우팅 테이블은 인터넷에 대한 경로가 하나만 존재한다고 간주하고 자체 기본 경로를 갖습니다. 그러면 소스 주소를 기반으로 하는 라우팅 규칙이 나가는 패킷에 적합한 라우팅 테이블을 선택합니다. OP의 경우 로컬 라우팅 테이블이 이미 이 경우를 처리하기 때문에 들어오는 패킷에 특별한 것이 필요하지 않습니다.
구현
먼저 interfaces
다른 설정을 추가하여 설정을 조정해야 합니다.미터법그렇지 않으면 sbtb-ipv6
동일한 메트릭을 가진 두 개의 기본 경로가 있을 수 없기 때문에 설정이 실패할 수 있습니다.
그런 다음 수동으로 이 작업을 수행하는 방법은 다음과 같습니다. HE의 경우 2000, SBTB의 경우 2001이라는 (임의의) 값을 갖는 두 개의 라우팅 테이블을 추가하고 관련 경로만 각 테이블에 복사합니다. 충돌 가능성이 없으므로 여기서 측정항목은 중요하지 않습니다.
ip -6 route add 2001:xxx:xxx:xxxx::/64 dev he-ipv6 table 2000
ip -6 route add default via 2001:xxx:xxx:xxxx::1 dev he-ipv6 table 2000
ip -6 route add 2a09:xxx:xxx:xxxx::/64 dev sbtb-ipv6 table 2001
ip -6 route add default via 2a09:xxx:xxx:xxxx::1 dev sbtb-ipv6 table 2001
그리고 라우팅 규칙을 사용하여 소스 주소를 기반으로 적절한 경로를 선택합니다(명시적으로 고정된 우선순위를 명시하고 를 사용하여 로컬에서 시작된 패킷임을 명시합니다 iif lo
).
ip -6 rule add pref 20000 from 2001:xxx:xxx:xxxx::2 iif lo lookup 2000
ip -6 rule add pref 20010 from 2a09:xxx:xxx:xxxx::2 iif lo lookup 2001
ping -I sbtb-ipv6 ...
인터페이스의 주소( )에 "간단히" 바인딩하는 것이 아니라 인터페이스 (예: )에 바인딩하는 경우에도 ping -I 2a09:xxx:xxx:xxxx::2
적절한 결과를 위해 이것을 사용합니다(기본 라우팅 테이블에 두 번째 기본 경로가 없는 레이어 2의 경우에 실제로 유용합니다. 실제로는 그렇지 않습니다. OP의 경우 레이어 3 인터페이스가 필요함):
ip -6 rule add pref 20001 oif he-ipv6 lookup 2000
ip -6 rule add pref 20011 oif sbtb-ipv6 lookup 2001
반대 방향(수신 트래픽, 일명 수신)은 주소가 추가될 때 라우팅 테이블에서 이미 적절하게 처리되므로 local
수신에 대해 특별히 수행할 작업은 없습니다.
최종 구성
위의 작업은 먼저 백업 원격 콘솔 액세스를 사용하여 수동으로 시도해야 합니다(IPv4는 영향을 받지 않지만 IPv4 액세스이면 충분합니다). 그런 다음 해당 기능을 지원하지 않는 경우(예: 모든 정책 라우팅) / 명령을 interfaces
사용하여 구성 파일 에 통합할 수 있습니다 . 이전 수동 테스트를 제거해야 합니다. 그렇지 않으면 인터페이스 설정의 몇 가지 명령이 오류와 충돌하여 인터페이스 구성이 실패하게 됩니다.up
down
ifupdown
RTNETLINK answers: File exists
업데이트: 여기에는 SBTB 터널의 원격 끝으로 세 번의 ping을 보내는 것도 포함됩니다. 설명에 따르면 이 터널은 서버로의 트래픽을 허용하기 전에 서버의 트래픽을 확인해야 하기 때문입니다. SBTB(터널링된) 피어 주소가 서버에 대한 트래픽 허용을 트리거하기에 충분하지 않은 경우 이를 "잘 알려진" IPv6 주소로 바꾸십시오. HE 인터페이스에도 동일한 기능을 추가할 수 있지만 이는 필요하지 않은 것 같습니다.
auto he-ipv6
iface he-ipv6 inet6 v4tunnel
address 2001:xxx:xxx:xxxx::2
netmask 64
endpoint xx.xx.xx.xx
local yy.yy.yyy.yy
ttl 255
gateway 2001:xxx:xxx:xxxx::1
metric 1000
up ip -6 route add 2001:xxx:xxx:xxxx::/64 dev he-ipv6 table 2000
up ip -6 route add default via 2001:xxx:xxx:xxxx::1 dev he-ipv6 table 2000
up ip -6 rule add pref 20000 from 2001:xxx:xxx:xxxx::2 iif lo lookup 2000
up ip -6 rule add pref 20001 oif he-ipv6 lookup 2000
down ip -6 rule del pref 20001
down ip -6 rule del pref 20000
auto sbtb-ipv6
iface sbtb-ipv6 inet6 v4tunnel
address 2a09:xxx:xxx:xxxx::2
netmask 64
endpoint zz.zz.zz.zz
local yy.yy.yyy.yy
ttl 255
gateway 2a09:xxx:xxx:xxxx::1
metric 1001
up ip -6 route add 2a09:xxx:xxx:xxxx::/64 dev sbtb-ipv6 table 2001
up ip -6 route add default via 2a09:xxx:xxx:xxxx::1 dev sbtb-ipv6 table 2001
up ip -6 rule add pref 20010 from 2a09:xxx:xxx:xxxx::2 iif lo lookup 2001
up ip -6 rule add pref 20011 oif sbtb-ipv6 lookup 2001
up ping -q -c3 -I sbtb-ipv6 2a09:xxx:xxx:xxxx::1
down ip -6 rule del pref 20011
down ip -6 rule del pref 20010
사용하는 방법?
이제 인터페이스 중 하나 또는 둘 다를 불러올 수 있으며, he-ipv6
두 인터페이스가 모두 실행될 때 우선순위가 부여되어 항상 제대로 작동합니다. 둘 다 작동 중일 때 인터페이스를 사용하려면 sbtb-ipv6
해당 주소에 바인딩하거나 인터페이스 자체에 바인딩해야 합니다. 다음은 커널이 사용할 것으로 예상되는 경로를 표시하는 예입니다.
# ip route get to 2001:db8:f00:ba7::1
2001:db8:f00:ba7::1 from :: via 2001:xxx:xxx:xxxx::1 dev he-ipv6 src 2001:xxx:xxx:xxxx::2 metric 1000 pref medium
# ip route get from 2001:xxx:xxx:xxxx::2 to 2001:db8:f00:ba7::1
2001:db8:f00:ba7::1 from 2001:xxx:xxx:xxxx::2 via 2001:xxx:xxx:xxxx::1 dev he-ipv6 table 2000 src 2001:xxx:xxx:xxxx::2 metric 1024 pref medium
# ip route get oif he-ipv6 to 2001:db8:f00:ba7::1
2001:db8:f00:ba7::1 from :: via 2001:xxx:xxx:xxxx::1 dev he-ipv6 table 2000 src 2001:xxx:xxx:xxxx::2 metric 1024 pref medium
# ip route get from 2a09:xxx:xxx:xxxx::2 to 2001:db8:f00:ba7::1
2001:db8:f00:ba7::1 from 2a09:xxx:xxx:xxxx::2 via 2a09:xxx:xxx:xxxx::1 dev sbtb-ipv6 table 2001 src 2a09:xxx:xxx:xxxx::2 metric 1024 pref medium
# ip route get oif sbtb-ipv6 to 2001:db8:f00:ba7::1
2001:db8:f00:ba7::1 from :: via 2a09:xxx:xxx:xxxx::1 dev sbtb-ipv6 table 2001 src 2a09:xxx:xxx:xxxx::2 metric 1024 pref medium
다양한 명령, 데몬 또는 도구에는 다른 소스 주소 또는 장치에 바인딩하기 위한 다양한 옵션이 필요합니다. 예: ping -I
, traceroute -i
, curl --interface
, ssh -b
/ ssh -B
등
다음 명령 중 하나의 결과를 비교하여 확인할 수 있습니다.
curl -6 https://ifconfig.co
curl -6 --interface 2001:xxx:xxx:xxxx::2 https://ifconfig.co
curl -6 --interface he-ipv6 https://ifconfig.co
다음 중 하나의 결과와 비교:
curl -6 --interface 2a09:xxx:xxx:xxxx::2 https://ifconfig.co
curl -6 --interface sbtb-ipv6 https://ifconfig.co