나는 친구들과 의사소통에 문제가 있다가상 탭 장치IPv6을 통해. 본질적으로 ping6 -I eth0 <tap interface link-local ipv6 address>
아무것도 반환하지 않습니다. 수도꼭지를 통해 호스트 측 엔드포인트를 핑할 수도 없습니다.
[user ~]$ ping6 -I eth0 fe80::88a2:f6ff:fe6f:90cb
PING fe80::88a2:f6ff:fe6f:90cb(fe80::88a2:f6ff:fe6f:90cb) from fe80::4f3:9ff:fec9:2032%eth0 eth0: 56 data bytes
^C
--- fe80::88a2:f6ff:fe6f:90cb ping statistics ---
8 packets transmitted, 0 received, 100% packet loss, time 7162ms
그리고 eth0의 tcpdump 출력은 다음과 같습니다.
20:54:00.658849 IP6 (flowlabel 0x1efcb, hlim 64, next-header ICMPv6 (58) payload length: 64) fe80::4f3:9ff:fec9:2032 > fe80::88a2:f6ff:fe6f:90cb: [icmp6 sum ok] ICMP6, echo request, seq 1
20:54:01.673920 IP6 (flowlabel 0x1efcb, hlim 64, next-header ICMPv6 (58) payload length: 64) fe80::4f3:9ff:fec9:2032 > fe80::88a2:f6ff:fe6f:90cb: [icmp6 sum ok] ICMP6, echo request, seq 2
20:54:02.698029 IP6 (flowlabel 0x1efcb, hlim 64, next-header ICMPv6 (58) payload length: 64) fe80::4f3:9ff:fec9:2032 > fe80::88a2:f6ff:fe6f:90cb: [icmp6 sum ok] ICMP6, echo request, seq 3
20:54:03.722004 IP6 (flowlabel 0x1efcb, hlim 64, next-header ICMPv6 (58) payload length: 64) fe80::4f3:9ff:fec9:2032 > fe80::88a2:f6ff:fe6f:90cb: [icmp6 sum ok] ICMP6, echo request, seq 4
20:54:04.745974 IP6 (flowlabel 0x1efcb, hlim 64, next-header ICMPv6 (58) payload length: 64) fe80::4f3:9ff:fec9:2032 > fe80::88a2:f6ff:fe6f:90cb: [icmp6 sum ok] ICMP6, echo request, seq 5
예상한 대로 Tap 장치 인터페이스의 tcpdump 오류는 비어 있습니다. eth0 자체에서 ping을 실행할 수 있습니다. eth0
Tap 인터페이스에서 ping을 실행할 수 없고 오류가 발생합니다 connect: Network is unreachable
. 그러나 tcpdump에 따르면 핑이 Tap 장치에 도달하지도 않는 것으로 나타나므로 이는 별도의 문제라고 생각합니다.
내 네트워크 설정입니다
[user ~]$ ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9001
inet 172.30.255.7 netmask 255.255.255.240 broadcast 172.30.255.15
inet6 2600:1f14:XXXX:XXXX:e134:ff0c:cccd:b262 prefixlen 128 scopeid 0x0<global>
inet6 fe80::4f3:9ff:fec9:2032 prefixlen 64 scopeid 0x20<link>
ether 06:f3:09:c9:20:32 txqueuelen 1000 (Ethernet)
[user ~]$ ifconfig tp-0ge-0000gf-0
tp-0ge-0000gf-0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 169.254.18.114 netmask 255.255.255.252 broadcast 0.0.0.0
inet6 fe80::88a2:f6ff:fe6f:90cb prefixlen 64 scopeid 0x20<link>
ether 8a:a2:f6:6f:90:cb txqueuelen 1000 (Ethernet)
현재 경로는 다음과 같습니다.
[user ~]$ ip -6 r s
2600:1f14:XXXX:XXXX:XXXX:ff0c:cccd:b262 dev eth0 proto kernel metric 256 expires 439sec pref medium
fe80::4f3:9ff:fec9:2032 dev eth0 metric 1024 pref medium
fe80::88a2:f6ff:fe6f:90cb dev tp-0ge-0000gf-0 metric 1024 pref medium
default via fe80::460:a1ff:fec3:9cb6 dev eth0 metric 1024 pref medium
ip6tables 필터 테이블은 모든 것을 통과시킵니다.
[user ~]$ sudo ip6tables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Tap과 eth0을 활성화 했으며 net.ipv6.conf.[inteface].forwarding
분명히 ipv6이 활성화되었습니다. 다른 중요한 커널 매개변수가 생각나면 여기에 추가하겠습니다.
이것은 Amazon Linux 2에 있습니다 cat /etc/os-release
.
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
포함해야 할 다른 정보가 있으면 알려주시기 바랍니다. 어떤 조언이라도 대단히 감사하겠습니다.
답변1
ifconfig
소개하자면, IPv6를 거의 처리하지 못하더라도 절대 사용하지 않는 것에 익숙해져야 합니다 . 를 사용하는 것과 같은 방법으로 ip -6 route show
항상 ip address show
(and ip link show
)를 사용하세요. ifconfig
이제 더 이상 사용되지 않는(더 이상 사용되지 않는 커널 API 사용으로 인해) 명령 제한(Linux에서)으로 인해 발생하는 문제를 방지할 수 있습니다 .
정보가 필요할 수 있는 세 가지 지점을 알 수 있습니다.
- IPv6 링크-로컬 주소에도 인터페이스가 완전히 주소 지정되어야 합니다.
IPv6 인터페이스에 연결된 모든 네트워크에는 동일한 링크-로컬 주소가 허용되므로 주소가 할당된 인터페이스에는 전체 링크 계층 주소가 있어야 합니다. 그것은에 지정되어 있습니다RFC 4007:
이러한 문자열에 대한 가능한 후보 중 하나는 인터페이스 이름입니다. 인터페이스는 모든 범위를 고유하게 명확하게 하기 때문입니다.
시스템에 대해 완전히 지정된 링크-로컬 주소는 다음과 같습니다.
fe80::4f3:9ff:fec9:2032%eth0
fe80::88a2:f6ff:fe6f:90cb%tp-0ge-0000gf-0
- 로컬 주소는 호스트에 속합니다
lo
따라서 이러한 라우팅이 허용되면 이들 사이의 (루프백) 인터페이스를 통해 라우팅됩니다. 시도하지 마십시오. 패킷을 수신할 수 없는 곳을 통해 강제로 전송됩니다 ping -I eth0
. eth0
따라서 ping
작동하는 것은 다음과 같습니다.
ping fe80::88a2:f6ff:fe6f:90cb%tp-0ge-0000gf-0
그리고 로컬이기 때문에 시스템은 기본적으로 동일한 소스를 선택합니다. 한 인터페이스에 연결된 로컬 링크-로컬 주소에서 다른 인터페이스에 연결된 다른 링크-로컬 주소로 이동하는 것은 허용되지 않을 수 있습니다(그러나 모든 인터페이스의 전역 주소에서 다른 인터페이스 로컬 주소의 링크-로컬 주소로). 또는 동일한 인터페이스의 두 번째 로컬인 경우). 그래서 이것은 실패할 것입니다:
ping -I fe80::4f3:9ff:fec9:2032%eth0 fe80::88a2:f6ff:fe6f:90cb%tp-0ge-0000gf-0
그러나 이것은 작동합니다:
ping -I 2600:1f14:XXXX:XXXX:e134:ff0c:cccd:b262 fe80::88a2:f6ff:fe6f:90cb%tp-0ge-0000gf-0
이는 TAP 인터페이스가 작동 중이라는 의미는 아닙니다. 로컬 시스템 자체에서 로컬 시스템을 핑하고 TAP 인터페이스를 전혀 사용하지 않는 것입니다.
- TUN/TAP 인터페이스의 중요한 부분은 표시되는 로컬 주소가 아닙니다.
TUN/TAP 인터페이스에서 중요한 것은작업 과정연결은 프레임이나 패킷을 수신하고 이를 처리(또는 터널링)하는 이 인터페이스 뒤에 있습니다. 튜토리얼에서 다음은 6단계에서 실행되는 프로세스입니다.
STEP#6 KVM qemu command to startup Guest using tap0 device
이 옵션을 사용합니다: 이전에 설정된 인터페이스 -net tap,script=no,ifname=tap0,vlan=0
에 연결합니다 . tap0
TUN/TAP 인터페이스의 핵심은 바로 시스템 네트워크를 프로세스에 연결하는 것입니다.
인터페이스에 tp-0ge-0000gf-0
링크 로컬 주소가 자동으로 할당되므로 이는 해당 인터페이스에 실행 중인 프로세스가 연결되어 있거나 존재했음을 의미합니다 tp-0ge-0000gf-0
. 사용 중이 ip link show tp-0ge-0000gf-0
거나 ip address show tp-0ge-0000gf-0
존재 여부를 확인할 수 있는 경우 LOWER_UP
(여기서는 다음으로 번역됨)첨부프로세스) 바꾸다 NO-CARRIER
(프로세스가 첨부되지 않았습니다.). ifconfig
그러한 정보는 표시되지 않습니다. 예를 들어 이러한 프로세스는 openvpn
QEMU 또는 QEMU일 수 있습니다. 릴레이/터널 애플리케이션 ssh
(튜닝 또는 탭 터널 모드 사용) 및 socat
도구에도 추가 옵션이 있습니다(단 socat
, 릴레이에만 해당: 내장 네트워크 스택은 포함되지 않음).
IPv6을 처리(또는 터널링)하도록 구성된 경우 (보이지 않는) 끝에 링크 로컬 주소가 할당되고 전역 주소도 할당될 수 있습니다.
핑을 통해 원격 링크 로컬 IPv6 주소를 검색할 수 있어야 합니다.링크에 로컬인 모든 노드의 주소대상(여전히 인터페이스 지정):
ping ff02::1%tp-0ge-0000gf-0
어떤 라우터가 있는지 검색하려면(있는 경우) 링크에 로컬인 모든 라우터 주소를 ping할 수 있습니다.
ping ff02::2%tp-0ge-0000gf-0
답변2
이는 IPv6 링크-로컬 주소이며 링크 내부에만 "상주" tp-0ge-0000gf-0
하고 라우팅할 수 없으며 eth0
.
핑하려면 마지막에 다음과 같이 장치를 지정해야 합니다.
$ ping6 fe80::88a2:f6ff:fe6f:90cb%tp-0ge-0000gf-0