ip6tables에서 규칙을 설정하거나 ipv6을 비활성화하는 것이 더 낫습니까?


11

다음과 같은 네트워크 구성이 있습니다.

# 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.comipv6을 비활성화해서는 안된다는 답변을 받았습니다.

어떻게해야할지 모르겠습니다. 연결 문제가 있습니다. 때때로 스택 교환 또는 Google에서 페이지에 액세스 할 수 없다는 것을 의미합니다. pastebin.com에도 문제가 있습니다. 각각의 경우에 동일한 증상이 있습니다. 브라우저에 주소를 입력 한 후 사이트에 액세스하기 위해 몇 분 정도 기다려야하며 2-3 번 다시로드 한 후에는 적어도 특정 시간.

답변:


13

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 AirplayWindows 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 연결을 얻을 때 주로 중요하지만, 당신이 이미 그것을 준비하더라도 상처를 입지 않을 것입니다 :-)


1
이제 이해가된다. icmpv6규칙을 추가 했지만 20 / 분으로 제한했으며 패킷이 거기에 있다는 것을 알 수 있습니다. ping6 -I eth0 fe80::2e0:4cff:fe75:309작동합니다.
Mikhail Morfikov

2

나는 시스템을 관리 할 때, 해당 시스템에 서비스를 명시 적 으로 제공 할 필요 가없는 것은 반드시 꺼야한다는 입장을 취합니다 . 이 철학은 다음에 관계없이 모든 것에 적용됩니다.

  • 불필요한 소프트웨어 제거
  • 서버에서 GUI 데스크탑 비활성화
  • 불필요한 하드웨어 비활성화 및 / 또는 제외
  • IPv6 비활성화
  • 불필요한 서비스 비활성화
  • 기타

나는 같은 철학을 가지고 있지만,이 경우에는 무엇을 해야할지 정말로 모른다. 어떤 사람들은 ipv6를 비활성화해야한다고 말하고 다른 사람들은 다른 말을합니다. ipv6이 비활성화 된 경우에도 문제가 있습니다.
Mikhail Morfikov

@MikhailMorfikov-ISP가 고객이 ISP에 액세스하기 위해 IPv6을 사용하게하는 프록시 / NAT를 수행합니까? 나는 이것이 당신에게 문제가되지 않는다고 생각합니다. 그렇지 않으면 IPv6 주소가 있지만 생각했습니다.
slm

나는 그들에게 물어봐야 할지도 모른다. 아마도 그들은 무언가를하고 문제를 해결할 것이다.
Mikhail Morfikov

2

또한 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를 끄면 지원에 영향을 줄 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.