다음과 같은 네트워크 구성이 있습니다.
# ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:e0:1c:73:02:09
inet addr:10.1.4.41 Bcast:10.1.255.255 Mask:255.255.0.0
inet6 addr: fe80::2e0:4cff:fe75:309/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:858600 errors:0 dropped:0 overruns:0 frame:0
TX packets:1069549 errors:0 dropped:0 overruns:5 carrier:0
collisions:0 txqueuelen:1000
RX bytes:142871181 (136.2 MiB) TX bytes:717982640 (684.7 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:37952 errors:0 dropped:0 overruns:0 frame:0
TX packets:37952 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3396918 (3.2 MiB) TX bytes:3396918 (3.2 MiB)
네트워크에 DHCP 서버가 있으며 다음 임대를 얻을 수 있습니다.
lease {
interface "eth0";
fixed-address 10.1.4.41;
option subnet-mask 255.255.0.0;
option routers 10.1.255.253;
option dhcp-lease-time 120;
option dhcp-message-type 5;
option domain-name-servers 82.160.125.52,213.199.198.248,82.160.1.1;
option dhcp-server-identifier 192.168.22.22;
renew 3 2014/01/01 18:34:41;
rebind 3 2014/01/01 18:35:30;
expire 3 2014/01/01 18:35:45;
}
나는 Ping 할 수 있습니다 127.0.0.1
, ::1
, 10.1.4.41
:
$ ping 10.1.4.41
PING 10.1.4.41 (10.1.4.41) 56(84) bytes of data.
64 bytes from 10.1.4.41: icmp_seq=1 ttl=64 time=0.065 ms
64 bytes from 10.1.4.41: icmp_seq=2 ttl=64 time=0.075 ms
64 bytes from 10.1.4.41: icmp_seq=3 ttl=64 time=0.085 ms
^C
--- 10.1.4.41 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.065/0.075/0.085/0.008 ms
$ ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.066 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.056 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.055 ms
^C
--- 127.0.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.055/0.059/0.066/0.005 ms
$ ping6 ::1
PING ::1(::1) 56 data bytes
64 bytes from ::1: icmp_seq=1 ttl=64 time=0.052 ms
64 bytes from ::1: icmp_seq=2 ttl=64 time=0.049 ms
64 bytes from ::1: icmp_seq=3 ttl=64 time=0.037 ms
^C
--- ::1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.037/0.046/0.052/0.006 ms
ipv6 주소를 ping 할 수 없습니다 fe80::2e0:4cff:fe75:309
:
$ ping6 fe80::2e0:4cff:fe75:309
connect: Invalid argument
iptables 규칙 (ipv4)을 설정했습니다.
# iptables -S
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-N TCP
-N UDP
-A INPUT -i eth0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i tun0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
-A OUTPUT -m conntrack --ctstate INVALID -j DROP
그리고 그것은 ipv4에 대해 예상대로 작동합니다. 그러나 ip6tables를 확인하면 일부 패킷이 거기에 있음을 알 수 있습니다.
# ip6tables -nvL
Chain INPUT (policy ACCEPT 381 packets, 27624 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 390 packets, 26296 bytes)
pkts bytes target prot opt in out source destination
나는 이 가이드를 따라 iptables (ipv4) 구성을 복사하여 ip6tables (ipv6)에 붙여 넣어야한다고 말합니다. 그러나이 작업을 수행 RELATED,ESTABLISHED
하면 ipv6 테이블 의 규칙 을 통과 할 수있는 패킷이 없습니다 . 입력 체인 정책 ( DROP
)으로 인해 모두 삭제 됩니다.
# ip6tables -nvL
Chain INPUT (policy DROP 5 packets, 360 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all eth0 * ::/0 ::/0 ctstate RELATED,ESTABLISHED
0 0 ACCEPT all lo * ::/0 ::/0
0 0 ACCEPT all tun0 * ::/0 ::/0 ctstate RELATED,ESTABLISHED
0 0 DROP all * * ::/0 ::/0 ctstate INVALID
0 0 UDP udp * * ::/0 ::/0 ctstate NEW
0 0 TCP tcp * * ::/0 ::/0 tcp flags:0x17/0x02 ctstate NEW
0 0 REJECT tcp * * ::/0 ::/0 reject-with tcp-reset
0 0 REJECT udp * * ::/0 ::/0 reject-with icmp6-port-unreachable
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all * * ::/0 ::/0 ctstate INVALID
Chain TCP (1 references)
pkts bytes target prot opt in out source destination
Chain UDP (1 references)
pkts bytes target prot opt in out source destination
보시다시피 출력 패킷이 없으므로 Google과 스택 교환이 내 컴퓨터에 연결하려고하는 이유는 무엇입니까? ipv6 주소를 ping 할 수 없어서 어떻게해야합니까?
그들은 또한 내 ISP에 ipv6이 없으면 (대여, ipv6 항목이 없음) ipv6을 비활성화하고 이전에을 사용 하여이 작업을 수행해야한다고 말합니다 ipv6.disable=1
. 에서 비슷한 질문을했으며 meta.stackoverflow.com
ipv6을 비활성화해서는 안된다는 답변을 받았습니다.
어떻게해야할지 모르겠습니다. 연결 문제가 있습니다. 때때로 스택 교환 또는 Google에서 페이지에 액세스 할 수 없다는 것을 의미합니다. pastebin.com에도 문제가 있습니다. 각각의 경우에 동일한 증상이 있습니다. 브라우저에 주소를 입력 한 후 사이트에 액세스하기 위해 몇 분 정도 기다려야하며 2-3 번 다시로드 한 후에는 적어도 특정 시간.
답변
IPv6 주소 fe80:
는 링크 로컬 주소로 시작합니다. 이러한 주소는 네트워크 인터페이스와 동일한 링크에서만 사용할 수 있습니다. 같은 링크 로컬 서브넷은 모든 네트워크에 존재하기 때문에 지정해야 인터페이스 하는 당신이 사용하고자하는 인터페이스를 제공합니다. 예를 들어 링크 로컬 주소를 핑하려는 경우.
다음 ping6
예 중 하나를 시도하십시오 . 둘 다 동일한 작업을 수행합니다.
ping6 fe80::2e0:4cff:fe75:309%eth0
ping6 -I eth0 fe80::2e0:4cff:fe75:309
또한 로컬 링크 (LAN)의 시스템 만이 로컬 링크 주소를 사용하여 시스템에 연결할 수 있습니다. 라우터는 해당 주소를 라우팅하지 않습니다. 머신에 도달하거나 라우팅 할 수있는 IPv6 주소가 없기 때문에 Google 또는 Stack Exchange가 머신으로 IPv6 트래픽을 전송하는 방법은 없습니다.
그렇다면 인터페이스에 어떤 IPv6 트래픽 이 표시됩니까? 아마도 mDNS ( 멀티 캐스트 DNS ) 및 로컬 링크에서 자동으로 연결할 수있는 다른 프로토콜과 같은 것 입니다. 예를 들어 Apple Airplay 및 Windows Home Group 입니다.
방화벽 규칙에 매우 중요한 사항이 누락되었습니다 ICMPv6
. IPv6는 ICMP를 IPv4보다 훨씬 많이 사용하며 ICMP 패킷을 허용하지 않으면 해당 트래픽과 관련된 오류 메시지를받지 않으므로 트래픽을 심각하게 손상시킬 수 있습니다. 이로 인해 긴 지연 / 시간 초과가 발생할 수 있습니다. ICMPv6 트래픽을 허용해도 일반적으로 문제가되지 않으므로 방화벽 규칙에 추가 할 수 있습니다.
ip6tables -A INPUT -p icmpv6 -j ACCEPT
ping6
패킷 을 차단하려면 사람들이 왜 아직도 그렇게하는지 이해하지 못하지만 연결을 디버깅하기가 훨씬 어려워집니다. 이전 ACCEPT
줄 앞에 다음과 같이 추가 할 수 있습니다 .
ip6tables -A INPUT -p icmpv6 --icmpv6-type 128 -j DROP
이것은 당신이 당신의 컴퓨터에 실제 글로벌 IPv6 연결을 얻을 때 주로 중요하지만, 당신이 이미 그것을 준비하더라도 상처를 입지 않을 것입니다 🙂
답변
나는 시스템을 관리 할 때, 해당 시스템에 서비스를 명시 적 으로 제공 할 필요 가없는 것은 반드시 꺼야한다는 입장을 취합니다 . 이 철학은 다음에 관계없이 모든 것에 적용됩니다.
- 불필요한 소프트웨어 제거
- 서버에서 GUI 데스크탑 비활성화
- 불필요한 하드웨어 비활성화 및 / 또는 제외
- IPv6 비활성화
- 불필요한 서비스 비활성화
- 기타
답변
또한 ISP에 ipv6이없는 경우 (임대시 ipv6 항목이 없음) ipv6을 비활성화하고 이전에 ipv6.disable = 1을 사용하여이 작업을 수행해야한다고 말합니다. meta.stackoverflow.com에서 비슷한 질문을했으며 ipv6을 비활성화해서는 안된다는 답변을 받았습니다.
물론 DHCP를 통한 IPv6 주소 임대는 표시되지 않습니다. DHCPv6의 목적은 다음과 같습니다. DHCP와 DHCPv6은 호환되지 않습니다.
IPv6 끄기 / 끄기 기준 : 필요하지 않고 ISP가 아직 제공하지 않은 경우 IPv6을 끄고 소개를 준비하십시오 . 여기에는 하드 코딩 된 IP 주소 또는 브로드 캐스트 사용과 같이 레거시 IP에 명시 적으로 의존하는 모든 항목을 제거 / 재 설계하는 것이 포함됩니다.
IPv6 끄기 제안 : 예를 들어 Microsoft는 IPv6을 운영 체제의 필수 부분으로 간주하므로 IPv6를 끄면 지원에 영향을 줄 수 있습니다.