如何配置工具使用IPv6在Linux VPS

IPv6是最近的IP协议版本。其在IPv4最立即有用优点是,它具有更广泛的地址空间。在本指南中,我们将讨论的工具和IPv6的版本如何配置一些常见的服务,把你的IPv6地址的优势。

介绍

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