web-dev-qa-db-ja.com

NIC IPv6で失敗するごとに複数のVLAN

デュアルスタック(IPv4およびIPv6)ホームネットワークを実行し、いくつかのVLANを使用して、IoTデバイス(VLAN 20)を通常のユーザー(VLAN 10)からネットワークハードウェア(タグなしVLAN)から分離します。私は現在、Raspberry Pi 3 B +(raspbianを実行)でローカルDNS(および他のいくつかのサービス)をホストしています。これは通常、タグなしVLANにありますが、他の2つのVLAN(10)のアドレスを指定してみます。 20)実験として(ファイアウォールルールの簡素化、ルーターの負荷の軽減など)。これに対する私の最初の試みは失敗したので、私は物事を単純化してタグなしのVLAN plus VLAN 10に配置しようとしましたが、それも失敗しました。理由がわかりません。

単一アドレスの設定

通常の設定は次のとおりです(タグなしVLANのアドレスのみ、VLAN 10または20)には何もありません):

/etc/network/interfacesは空です。

これが/etc/dhcpcd.conf

hostname
clientid
persistent
option rapid_commit
option domain_name_servers, domain_name, domain_search, Host_name
option classless_static_routes
option ntp_servers
option interface_mtu
require dhcp_server_identifier
slaac private

interface eth0
static ip_address=192.168.1.10/24
static ip6_address=fd:<STATIC_IPv6_ULA>/64
static routers=192.168.1.1 fd:<STATIC_IPv6_ULA_FOR_ROUTER>
static domain_name_servers=127.0.0.1 ::1

そして、これが私が得る結果のアドレスです:

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope Host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope Host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether <MAC_ADDR> brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.10/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fd:<IPv6_ULA_FROM_SLAAC>/64 scope global mngtmpaddr noprefixroute dynamic
       valid_lft 85965sec preferred_lft 13965sec
    inet6 <IPv6_GLOBAL_ADDR_FROM_SLAAC>/64 scope global mngtmpaddr noprefixroute dynamic
       valid_lft 85965sec preferred_lft 13965sec
    inet6 fd:<STATIC_IPv6_ULA>/64 scope global noprefixroute
       valid_lft forever preferred_lft forever
    inet6 fe80::<IPv6_LLA>/64 scope link
       valid_lft forever preferred_lft forever

これは正常に機能します。ルーターを介してVLAN10および20のホストにルーティングできます。 VLANの1つにインターフェースを追加しようとすると問題が発生します...

VLANの追加

VLAN 10にアドレスを追加するために、単一アドレス設定の構成の上に次の構成を追加しました。

これが/etc/network/interfaces

auto eth0.10

iface eth0.10 inet manual
  vlan-raw-device eth0

iface eth0.10 inet6 manual
  vlan-raw-device eth0

これが/etc/dhcpcd.conf

interface eth0.10
static ip_address=10.0.10.10/24
static ip6_address=fd:<STATIC_IPv6_VLAN_10_ULA>/64
static routers=10.0.10.1 <STATIC_IPv6_VLAN_10_ULA_FOR_ROUTER>
static domain_name_servers=127.0.0.1 ::1

そして、これが私が得る結果のアドレスです:

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope Host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope Host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether <MAC_ADDR> brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.10/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fd:<STATIC_IPv6_ULA>/64 scope global noprefixroute
       valid_lft forever preferred_lft forever
3: eth0.10@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether <MAC_ADDR> brd ff:ff:ff:ff:ff:ff
    inet 10.0.10.10/24 brd 10.0.10.255 scope global eth0.10
       valid_lft forever preferred_lft forever
    inet6 fd:<IPv6_VLAN_10_ULA_FROM_SLAAC>/64 scope global mngtmpaddr noprefixroute dynamic
       valid_lft 86377sec preferred_lft 14377sec
    inet6 <IPv6_GLOBAL_ADDR_FROM_SLAAC>/64 scope global mngtmpaddr noprefixroute dynamic
       valid_lft 86377sec preferred_lft 14377sec
    inet6 fd:<STATIC_IPv6_VLAN_10_ULA>/64 scope global noprefixroute
       valid_lft forever preferred_lft forever
    inet6 fe80::<IPv6_LLA>/64 scope link
       valid_lft forever preferred_lft forever

これは非常に奇妙なことでした。タグなしVLAN上のグローバルIPv6アドレスと、リンクローカルアドレス(LLA)およびSLAACから取得したULAを失いました。何が機能するかを確認するためにいくつかのpingを試しましたが、次のことがわかりました。

$ ping -4 -I eth0 www.google.com
<SUCCESS>
$ ping -4 -I eth0.10 www.google.com
<SUCCESS>
$ ping -6 -I eth0 www.google.com
connect: Network is unreachable
$ ping -6 -I eth0.10 www.google.com
<SUCCESS>

そのため、IPv4は両方のVLANで正常に機能していましたが、タグなしVLANではIPv6が壊れていました。 syslogに関連するすべてのメッセージについてdhcpcdを調べたところ、次のことがわかりました。

00:28:23 HOSTNAME systemd[1]: Starting dhcpcd on all interfaces...
00:28:23 HOSTNAME dhcpcd[340]: dev: loaded udev
00:28:23 HOSTNAME dhcpcd[340]: eth0: waiting for carrier
00:28:23 HOSTNAME dhcpcd[340]: eth0.10: waiting for carrier
00:28:24 HOSTNAME dhcpcd[340]: eth0: carrier acquired
00:28:24 HOSTNAME dhcpcd[340]: DUID <DUID>
00:28:24 HOSTNAME dhcpcd[340]: eth0: IAID <IAID>
00:28:24 HOSTNAME dhcpcd[340]: eth0: IAID conflicts with one assigned to eth0.10
00:28:24 HOSTNAME dhcpcd[340]: eth0: adding address fe80::<IPv6_LLA>
00:28:24 HOSTNAME dhcpcd[340]: eth0: adding address fd:<STATIC_IPv6_ULA>/64
00:28:24 HOSTNAME dhcpcd[340]: eth0: adding route to fd:<STATIC_IPv6_ULA_PREFIX>/64
00:28:24 HOSTNAME dhcpcd[340]: eth0: probing address 192.168.1.10/24
00:28:24 HOSTNAME dhcpcd[340]: eth0.10: carrier acquired
00:28:24 HOSTNAME dhcpcd[340]: eth0.10: IAID <IAID>
00:28:24 HOSTNAME dhcpcd[340]: eth0.10: IAID conflicts with one assigned to eth0
00:28:24 HOSTNAME dhcpcd[340]: eth0: deleting address fe80::<IPv6_LLA>
00:28:24 HOSTNAME dhcpcd[340]: eth0.10: adding address fe80::<IPv6_LLA>
00:28:24 HOSTNAME dhcpcd[340]: eth0.10: adding address fd:<STATIC_IPv6_VLAN_10_ULA>/64
00:28:24 HOSTNAME dhcpcd[340]: eth0.10: adding route to fd:<STATIC_IPv6_ULA_VLAN_10_PREFIX>/64
00:28:24 HOSTNAME dhcpcd[340]: eth0.10: probing address 10.0.10.10/24
00:28:24 HOSTNAME dhcpcd[340]: eth0: soliciting an IPv6 router
00:28:25 HOSTNAME dhcpcd[340]: eth0.10: soliciting an IPv6 router
00:28:29 HOSTNAME dhcpcd[340]: eth0.10: using static address 10.0.10.10/24
00:28:29 HOSTNAME dhcpcd[340]: eth0.10: adding route to 10.0.10.0/24
00:28:29 HOSTNAME dhcpcd[340]: eth0.10: adding default route via 10.0.10.1
00:28:29 HOSTNAME dhcpcd[340]: forked to background, child pid 603
00:28:29 HOSTNAME systemd[1]: Started dhcpcd on all interfaces.
00:28:30 HOSTNAME dhcpcd[603]: eth0: using static address 192.168.1.10/24
00:28:30 HOSTNAME dhcpcd[603]: eth0: adding route to 192.168.1.0/24
00:28:30 HOSTNAME dhcpcd[603]: eth0: adding default route via 192.168.1.1
00:28:30 HOSTNAME dhcpcd[603]: eth0.10: Router Advertisement from fe80::<IPv6_LLA_OF_ROUTER>
00:28:30 HOSTNAME dhcpcd[603]: eth0.10: adding address <IPv6_GLOBAL_ADDR_FROM_SLAAC>/64
00:28:30 HOSTNAME dhcpcd[603]: eth0.10: adding address <IPv6_VLAN_10_ULA_FROM_SLAAC>/64
00:28:30 HOSTNAME dhcpcd[603]: eth0.10: adding route to <IPv6_GLOBAL_PREFIX_FROM_SLAAC>/64
00:28:30 HOSTNAME dhcpcd[603]: eth0.10: adding default route via fe80::<IPv6_LLA_OF_ROUTER>
00:29:17 HOSTNAME dhcpcd[603]: eth0.10: fe80::<IPv6_LLA_OF_ROUTER> is unreachable, expiring it
00:30:08 HOSTNAME dhcpcd[603]: eth0.10: fe80::<IPv6_LLA_OF_ROUTER> is reachable again

そのため、タグなしVLANでLLAが削除され、そのインターフェイスでルーターアドバタイズメントが表示されなくなるという問題があるようです。

このセットアップは可能であるはずだと思います(NIC IPv6で動作)ごとに複数のVLAN)。この問題の原因について何か考えはありますか?これは私による構成の失敗ですか?

便利な場合は、RaspberryPiで実行されているraspbianのカーネルバージョンを次に示します。

$ uname -a
Linux HOSTNAME 4.14.70-v7+ #1144 SMP Tue Sep 18 17:34:46 BST 2018 armv7l GNU/Linux
2
pewter-bronco

ヒント@grawityをありがとう!問題は、単にdhcpcdが古くなっていることでした。上記のコメントで@grawityが述べたように、dhcpcdは、バージョン7.0.0のVLANタグ付きインターフェイスでの自動IAIDのサポートのみを追加しました。これは、私のラズビアンシステムでのaptからのデフォルトのインストール:

$ Sudo dhcpcd --version
dhcpcd 6.11.5
Copyright (c) 2006-2016 Roy Marples
Compiled in features: INET IPv4LL INET6 DHCPv6 AUTH

それが誰かを助ける場合に備えて、ソースから最新バージョン(7.0.8)をインストールするために私が取った手順は次のとおりです。

dhcpcdの最新バージョンについては https://github.com/rsmarples/dhcpcd/releases を確認してください。

wget https://github.com/rsmarples/dhcpcd/archive/dhcpcd-7.0.8.tar.gz
tar xzf dhcpcd-7.0.8.tar.gz
cd dhcpcd-dhcpcd-7.0.8
./configure --libexecdir=/lib/dhcpcd --dbdir=/var/lib/dhcpcd5
make
Sudo make install

これらの手順 は一般的に/var/lib/dhcpcd5の使用を推奨していますが、dbdir/var/lib/dhcpcdに設定していることに注意してください。私のシステムでは、/var/lib/dhcpcd5dhcpcdの既存のインストールですでに使用されており、/var/lib/dhcpcdは存在しませんでした。自分にとって意味のあることは何でもしてください。

これで完了です。

$ Sudo dhcpcd --version
dhcpcd 7.0.8
Copyright (c) 2006-2018 Roy Marples
Compiled in features: INET ARP ARPing IPv4LL INET6 DHCPv6 AUTH

そして今、すべてが追加されたVLAN 10インターフェースで完全に機能します(そして、VLAN 20インターフェースを追加したときにも機能します))これは次のようになりますVLAN 10インターフェイスが追加されました:

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope Host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope Host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether <MAC_ADDR> brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.10/24 brd 192.168.1.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fd:<IPv6_ULA_FROM_SLAAC>/64 scope global mngtmpaddr noprefixroute dynamic
       valid_lft 86382sec preferred_lft 14382sec
    inet6 <IPv6_GLOBAL_ADDR_FROM_SLAAC>/64 scope global mngtmpaddr noprefixroute dynamic
       valid_lft 86382sec preferred_lft 14382sec
    inet6 fd:<STATIC_IPv6_ULA>/64 scope global noprefixroute
       valid_lft forever preferred_lft forever
    inet6 fe80::<IPv6_LLA>/64 scope link
       valid_lft forever preferred_lft forever
3: eth0.10@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether <MAC_ADDR> brd ff:ff:ff:ff:ff:ff
    inet 10.0.10.10/24 brd 10.0.10.255 scope global noprefixroute eth0.10
       valid_lft forever preferred_lft forever
    inet6 fd:<IPv6_VLAN_10_ULA_FROM_SLAAC>/64 scope global mngtmpaddr noprefixroute dynamic
       valid_lft 86381sec preferred_lft 14381sec
    inet6 <IPv6_VLAN_10_GLOBAL_ADDR_FROM_SLAAC>/64 scope global mngtmpaddr noprefixroute dynamic
       valid_lft 86381sec preferred_lft 14381sec
    inet6 fd:<STATIC_IPv6_VLAN_10_ULA>/64 scope global noprefixroute
       valid_lft forever preferred_lft forever
    inet6 fe80::<IPv6_LLA_2>/64 scope link
       valid_lft forever preferred_lft forever

興味深いことに、各インターフェイスのLLAは一意です。 IAIDから派生しているようです。これは、syslogからわかります。現在は各インターフェイスで一意です。 eth0の場合、IAIDはMACアドレスから取得されますが、VLAN 10インターフェイスの場合、IAIDは単にff:00:00:0aです。VLAN 20インターフェイスの場合はff:00:00:14です。したがって、IAIDはff::VLAN_NUMBERであるように見えます。これにより、各インターフェイスで一意のLLAが生成されます。いずれにしても、それは実際の問題というよりも好奇心が強いです。

とにかく、すべてのインターフェースは適切に構成され、すべて内部ネットワークホストと外部インターネットホストに到達できます。もう一度ありがとう@grawity!

0
pewter-bronco