我有以下网络配置:
# 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)
Run Code Online (Sandbox Code Playgroud)
我的网络中有 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;
}
Run Code Online (Sandbox Code Playgroud)
我可以 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
Run Code Online (Sandbox Code Playgroud)
我无法 ping ipv6 地址fe80::2e0:4cff:fe75:309
:
$ ping6 fe80::2e0:4cff:fe75:309
connect: Invalid argument
Run Code Online (Sandbox Code Playgroud)
我已经设置了一些 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
Run Code Online (Sandbox Code Playgroud)
并且它在 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
Run Code Online (Sandbox Code Playgroud)
我遵循了本指南,他们说我应该复制 iptables (ipv4) 配置并将其粘贴到 ip6tables (ipv6) 中。但是当我这样做时,没有数据包可以通过RELATED,ESTABLISHED
ipv6表中的规则。由于 INPUT 链策略 ( 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
Run Code Online (Sandbox Code Playgroud)
如您所见,没有输出数据包,那么为什么 google 和 stack exchange 尝试连接到我的机器?他们是怎么做到的,因为即使我也无法 ping 我的 ipv6 地址?
他们还说,如果我的 ISP 没有 ipv6(在租约中,没有 ipv6 条目)我应该禁用 ipv6 并且之前使用ipv6.disable=1
. 我在 上问了类似的问题meta.stackoverflow.com
,得到的答案是我不应该禁用 ipv6。
我不知道该怎么做。我有一些连接问题,我的意思是有时我无法在堆栈交换或谷歌访问页面,我也有 pastebin.com 的问题。在每种情况下都有相同的症状——在我的浏览器中输入地址后,有时我必须等待几分钟才能访问该站点,并且在重新加载 2-3 次后,我可以自由浏览它,至少在一段时间内一定的时间。
小智 14
您的 IPv6 地址以 开头,fe80:
因此是链接本地地址。这些地址只能在与网络接口相同的链路上使用。因为同样的链路本地子网中的每个网络上存在的接口,你必须指定哪个你想使用的界面。例如,当您要 ping 链接本地地址时。
尝试以下ping6
示例之一。两者都做同样的事情:
ping6 fe80::2e0:4cff:fe75:309%eth0
ping6 -I eth0 fe80::2e0:4cff:fe75:309
Run Code Online (Sandbox Code Playgroud)
这也意味着只有本地链接(您的 LAN)上的系统才能使用此链接本地地址连接到您的系统。路由器不会路由这些地址。Google 或 Stack Exchange 无法向您的机器发送 IPv6 流量,因为您的机器没有可从它们访问/路由的 IPv6 地址。
那么,什么IPv6流量是你看到你的界面上?可能像 mDNS(多播 DNS)和其他可以在本地链接上自动连接的协议。例如Apple Airplay和Windows Home Group。
您的防火墙规则缺少一个非常重要的东西:ICMPv6
. IPv6 使用 ICMP 比 IPv4 多得多,并且不让 ICMP 数据包进入会严重削弱您的流量,因为您不会收到与该流量相关的错误消息。这可能会导致长时间的延迟/超时。允许 ICMPv6 流量进入通常不会有什么坏处,因此您可以将其添加到您的防火墙规则中:
ip6tables -A INPUT -p icmpv6 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
如果你想阻止ping6
数据包(虽然我不太明白为什么人们现在仍然这样做,这使得调试连接变得更加困难)你可以在上ACCEPT
一行之前添加:
ip6tables -A INPUT -p icmpv6 --icmpv6-type 128 -j DROP
Run Code Online (Sandbox Code Playgroud)
当您将真正的全球 IPv6 连接到您的机器时,这一点非常重要,但如果您已经为此做好了准备,这不会有什么坏处:-)
在管理系统时,我始终采取的立场是,任何我没有明确需要在所述系统上提供服务的内容都应该关闭。这一哲学适用于一切事物,无论是: