介绍
IPv6是IP协议的最新版本,整个互联网依赖于连接到其他位置(IP协议有点冗余,因为IP代表互联网协议,但我们将使用它,因为它很容易)。虽然IPv4仍在世界许多地区使用,但是IPv4地址空间正在以快速的速率消耗,并且不足以支持快速部署互联网就绪的设备。 IPv6寻求解决这些问题。以及在协议使得一般的改进,利用IPv6地址的最明显的好处是,它具有 大得多的地址空间。虽然IPv4允许2 ^ 32个地址(其中某些保留为特殊用途),IPv6地址空间允许2 ^ 128个地址,这是令人难以置信的增加。 虽然IPv6开辟了很多机会并解决了许多长期存在的问题,但是如果习惯于仅使用IPv4,则需要对某些常规网络配置进行一些调整。在本指南中,我们将讨论一些流行的IPv4工具和实用程序的IPv6对应部分,并讨论如何配置一些流行的服务以利用IPv6。使用IPv6的简单网络诊断
用于诊断网络问题的一些最简单的实用程序是考虑到IPv4而创建的。为了解决这个问题,当我们想要处理IPv6流量时,我们可以使用他们的IPv6表亲。 首先,看你当前配置的IPv6地址为您的服务器,你可以使用iproute2
工具,为您显示当前配置的地址:
ip -6 addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
inet6 2400:6180:0:d0::41f/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::601:15ff:fe43:b201/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
inet6 fe80::601:15ff:fe43:b202/64 scope link
valid_lft forever preferred_lft forever
打印出来的IPv6路由表,你可以使用
netstat
输入类似这样:
netstat -A inet6 -rn
Kernel IPv6 routing table
Destination Next Hop Flag Met Ref Use If
2400:6180:0:d0::/64 :: U 256 0 1 eth0
fe80::/64 :: U 256 0 0 eth1
fe80::/64 :: U 256 0 0 eth0
::/0 2400:6180:0:d0::1 UG 1024 0 0 eth0
::/0 :: !n -1 1 90 lo
::1/128 :: Un 0 1 20 lo
2400:6180:0:d0::41f/128 :: Un 0 1 86 lo
fe80::601:15ff:fe43:b201/128 :: Un 0 1 75 lo
fe80::601:15ff:fe43:b202/128 :: Un 0 1 0 lo
ff00::/8 :: U 256 0 0 eth1
ff00::/8 :: U 256 0 0 eth0
::/0 :: !n -1 1 90 lo
如果您喜欢iproute2工具,您可以通过键入以下内容获取类似信息:
ip -6 route show
2400:6180:0:d0::/64 dev eth0 proto kernel metric 256
fe80::/64 dev eth1 proto kernel metric 256
fe80::/64 dev eth0 proto kernel metric 256
default via 2400:6180:0:d0::1 dev eth0 metric 1024
现在,您已经知道如何获取您自己的IPv6信息,让我们了解一下如何使用一些与IPv6协同工作的工具。 无处不在
ping
命令实际上是IPv4的特异性。 该命令的IPv6版本,其工作方式完全一样,但对于IPv6地址,是勿庸置疑命名
ping6
。这将ping本地环回接口:
ping6 -c 3 ::1
PING ::1(::1) 56 data bytes
64 bytes from ::1: icmp_seq=1 ttl=64 time=0.021 ms
64 bytes from ::1: icmp_seq=2 ttl=64 time=0.028 ms
64 bytes from ::1: icmp_seq=3 ttl=64 time=0.022 ms
--- ::1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.021/0.023/0.028/0.006 ms
正如你可以看到,这完全符合预期,唯一的区别是协议版本用于寻址。 你可能靠另一个工具是
traceroute
。还有一个IPv6等效可用:
traceroute6 google.com
traceroute to google.com (2404:6800:4003:803::1006) from 2400:6180:0:d0::41f, 30 hops max, 24 byte packets
1 2400:6180:0:d0:ffff:ffff:ffff:fff1 (2400:6180:0:d0:ffff:ffff:ffff:fff1) 0.993 ms 1.034 ms 0.791 ms
2 2400:6180::501 (2400:6180::501) 0.613 ms 0.636 ms 0.557 ms
3 2400:6180::302 (2400:6180::302) 0.604 ms 0.506 ms 0.561 ms
4 10gigabitethernet1-1.core1.sin1.he.net (2001:de8:4::6939:1) 6.21 ms 10.869 ms 1.249 ms
5 15169.sgw.equinix.com (2001:de8:4::1:5169:1) 1.522 ms 1.205 ms 1.165 ms
6 2001:4860::1:0:337f (2001:4860::1:0:337f) 2.131 ms 2.164 ms 2.109 ms
7 2001:4860:0:1::523 (2001:4860:0:1::523) 2.266 ms 2.18 ms 2.02 ms
8 2404:6800:8000:1c::8 (2404:6800:8000:1c::8) 1.741 ms 1.846 ms 1.895 ms
您可能熟悉的就是
tracepath
命令。这遵循IPv6版本的其他命令的示例:
tracepath6 ::1
1?: [LOCALHOST] 0.045ms pmtu 65536
1: ip6-localhost 0.189ms reached
1: ip6-localhost 0.110ms reached
Resume: pmtu 65536 hops 1 back 64
如果你需要监控流量,因为它涉及到你的机器中,
tcpdump
程序经常被使用。 我们可以得到这个工具用表达式过滤以仅显示我们的IPv6流量
ip6 or proto ipv6
我们的选项之后。 例如,我们可以迅速地衡量告诉工具只能捕捉我们感兴趣的信息很容易流IPv6流量我们可以使用这个命令取之。
这里只收集的信息汇总,以免贻误输出:
tcpdump -t -n -i eth0 -s 512 -vv ip6 or proto ipv6
检查IPv6 DNS信息
您可以使用典型工具轻松检查域的DNS信息。主要的区别是,你可能会被要求AAAA
记录,这是用于IPv6地址,而不是
A
记录,这仅用于IPv4的映射。 要获取IPv6地址记录域,你可以简单地要求
AAAA
记录。 随着
host
命令,你可以做这样的:
host -t AAAA google.com
google.com has IPv6 address 2404:6800:4003:803::1004
如果你喜欢使用
dig
,您可以通过使用此语法获得类似的结果:
dig google.com AAAA
; <<>> DiG 9.8.1-P1 <<>> google.com AAAA
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14826
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;google.com. IN AAAA
;; ANSWER SECTION:
google.com. 299 IN AAAA 2404:6800:4003:803::1006
;; Query time: 5 msec
;; SERVER: 8.8.4.4#53(8.8.4.4)
;; WHEN: Tue Apr 1 13:59:23 2014
;; MSG SIZE rcvd: 56
如您所见,在使用IPv6地址时,检查DNS为您的域正确解析是很容易的。
使用IPv6的网络服务
大多数常见的网络服务应该能够处理IPv6流量。有时,他们需要特殊的标志或语法,而在其他时候,它们提供了专门用于IPv6的替代实现。SSH配置
对于SSH,可以将守护程序配置为侦听IPv6地址。这在您可以打开的配置文件中进行控制:sudo nano /etc/ssh/sshd_config
该
ListenAddress
指定哪个解决SSH守护进程将。对于IPv4地址,这看起来像这样:
ListenAddress 111.111.111.111:22
这侦听IPv4地址
111.111.111.111
端口22上对于IPv6地址,您可以通过将方括号中的地址做相同的:
ListenAddress [1341:8954:a389:33:ba33::1]:22
这告诉SSH守护听
1341:8954:a389:33:ba33::1
地址的端口22。你可以告诉它通过键入听取
所有可用
的 IPv6地址:
ListenAddress ::
记住在进行更改后重新加载守护程序:
sudo service ssh restart
在客户端,如果你连接到配置守护程序使用IPv4
和 IPv6听,您可以强制客户端只使用为使用IPv6
-6
标志,就像这样:
ssh -6 username@host.com
Web服务器配置
与SSH守护程序类似,Web服务器也必须配置为侦听IPv6地址。 在Apache中,您可以使用以下语法将服务器配置为响应特定IPv6地址上的请求:Listen [1341:8954:a389:33:ba33::1]:80
这告诉服务器在端口80上侦听这个特定的地址。我们可以将它与IPv4地址合并,以允许更多的灵活性,如:
Listen 111.111.111.111:80
Listen [1341:8954:a389:33:ba33::1]:80
在实践中,如果您想在端口80上的所有协议的所有接口上侦听连接,您可以使用:
Listen 80
在虚拟主机级别上,还可以指定IPv6地址。在这里,您可以看到可以将虚拟主机配置为与IPv4地址和IPv6地址匹配:
<VirtualHost 111.111.111.111:80, [1341:8954:a389:33:ba33::1]:80>
. . .
</VirtualHost>
请记住重新启动服务以进行更改:
sudo service apache2 restart
如果你喜欢使用Nginx作为你的web服务器,我们可以实现类似的配置。对于listen指令,我们可以将其用于IPv6流量:
listen [1341:8954:a389:33:ba33::1]:80;
在Linux中,这实际上能够在端口80上启用IPv4流量,因为它会自动将IPv4请求映射到IPv6地址。这实际上阻止您分别指定IPv6地址和IPv4地址,如下所示:
listen [1341:8954:a389:33:ba33::1]:80;
listen 111.111.111.111:80;
这将导致错误,说明端口已绑定到另一个服务。如果要使用不同的指令这样,你必须使用关闭此功能
sysctl
是这样的:
sysctl -w net.ipv6.bindv6only=1
您可以确保这是在开机时自动应用通过将其添加到
/etc/sysctl.conf
:
sudo nano /etc/sysctl.conf
. . .
net.ipv6.bindv6only=1
之后,您可以使用使用类似的配置,是由加入前没有一个
ipv6only=on
标志IPv6的监听指令:
listen [1341:8954:a389:33:ba33::1]:80 ipv6only=on;
listen 111.111.111.111:80;
再次,重新启动Nginx进行更改:
sudo service nginx restart
防火墙配置
如果你习惯使用配置netfilter的配置前端喜欢你的防火墙规则iptables
,你会很高兴地知道,有一个叫做等价工具
ip6tables
。 我们这里有一个指导
如何配置iptables的为Ubuntu在这里。 对于IPv6的变种,你可以简单地替换命令
ip6tables
管理的IPv6数据包过滤规则。例如,要列出IPv6规则,您可以键入:
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
如果您使用的是
ufw
工具,那么恭喜你,你已经完成了! 该
ufw
工具同时配置,除非另有规定两个。您可能必须为特定的IPv6地址添加规则,但不必使用其他工具。 您可以了解更多有关
如何使用UFW这里。
TCP包装器配置
如果使用TCP封装器来控制通过访问您的服务器/etc/hosts.allow
和
/etc/hosts.deny
的文件,你可以简单地使用IPv6的语法来匹配特定源的规则。 例如,您可能只允许一个IPv4和IPv6地址通过键入编辑通过SSH连接
/etc/hosts.allow
文件并添加这样的:
sudo nano /etc/hosts.allow
. . .
sshd: 111.111.0.0/255.255.254.0, [1341:8954:a389:33::]/64
如您所见,很容易调整当前的TCP包装器规则以应用于IPv6地址。您可以了解更多有关
如何格式化IP地址和子网在这里。
结论
希望,现在你意识到,转换到IPv6或利用IPv6除了IPv4是一个相当简单的过程。 您将必须专门调查您使用的任何网络服务,以了解是否有任何额外的配置更改需要正确使用您的IPv6资源。但是,现在您应该感觉更舒适地使用IPv6与您最基本的实用程序和服务。
作者:Justin Ellingwood