LinuxVPSで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
ご覧のとおり、これは期待どおりに機能しますが、唯一の違いは、アドレス指定に使用されているプロトコルバージョンです。
信頼できるもう1つのツールは、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プログラムがよく使用されます。 オプションの後に式ip6 or proto ipv6を使用してフィルタリングすることにより、このユーティリティでIPv6トラフィックのみを表示できます。
たとえば、関心のある情報のみをキャプチャするようにツールに指示することで、急速に流れるIPv6トラフィックを簡単に測定できます。 here から取得したこのコマンドを使用して、出力の遅延を回避するために情報の要約のみを収集できます。
tcpdump -t -n -i eth0 -s 512 -vv ip6 or proto ipv6
IPv6DNS情報の確認
一般的なツールを使用して、ドメインのDNS情報を簡単に確認できます。 主な違いは、IPv4マッピングにのみ使用されるAレコードではなく、IPv6アドレスに使用されるAAAAレコードを要求する可能性があることです。
ドメインの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
これは、ポート22でIPv4アドレス111.111.111.111をリッスンします。 IPv6アドレスの場合、アドレスを角かっこで囲むことで同じことができます。
ListenAddress [1341:8954:a389:33:ba33::1]:22
これは、SSHデーモンにポート22の1341:8954:a389:33:ba33::1アドレスをリッスンするように指示します。 次のように入力することで、すべての使用可能なIPv6アドレスをリッスンするように指示できます。
ListenAddress ::
変更を加えた後、デーモンをリロードすることを忘れないでください。
sudo service ssh restart
クライアント側で、接続しているデーモンがIPv4およびIPv6を使用してリッスンするように構成されている場合、次のように-6フラグを使用することによってのみクライアントにIPv6を使用させることができます。 :
ssh -6 [email protected]
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では、これにより、IPv4要求がIPv6アドレスに自動的にマップされるため、ポート80でもIPv4トラフィックが実際に有効になります。 これにより、実際には、次のように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
その後、IPv6リスニングディレクティブにipv6only=onフラグを追加することにより、以前に失敗していたものと同様の構成を使用できます。
listen [1341:8954:a389:33:ba33::1]:80 ipv6only=on; listen 111.111.111.111:80;
もう一度、Nginxを再起動して変更を加えます。
sudo service nginx restart
ファイアウォール構成
iptablesなどのnetfilter構成フロントエンドを使用してファイアウォールルールを構成することに慣れている場合は、ip6tablesと呼ばれる同等のツールがあることを知って幸せです。
ここにUbuntuのiptablesを構成する方法に関するガイドがあります。
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構文を使用して特定のソースルールに一致させることができます。
たとえば、/etc/hosts.allowファイルを編集して次のように入力することで、IPv4アドレスとIPv6アドレスのみがSSH経由で接続できるようにすることができます。
sudo nano /etc/hosts.allow
. . . sshd: 111.111.0.0/255.255.254.0, [1341:8954:a389:33::]/64
ご覧のとおり、現在のTCPラッパールールをIPv6アドレスに適用するように調整するのは非常に簡単です。 IPアドレスとサブネットのフォーマット方法について詳しくは、こちらをご覧ください。
結論
うまくいけば、IPv6に移行するか、IPv4に加えてIPv6を利用することは、かなり簡単なプロセスであることに気付くでしょう。
IPv6リソースを正しく利用するために必要な追加の構成変更があるかどうかを確認するために、使用するネットワークサービスを具体的に調査する必要があります。 ただし、これで、最も基本的なユーティリティとサービスを使用してIPv6をより快適に操作できるようになります。