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

介绍

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
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏