Ubuntu 16.04(カーネル4.7.3)システムがあり、最初に受信したRAが期限切れ(30分)になった後、IPv6のデフォルトルートを失います。
システムの起動時のルーティングテーブルは次のとおりです。
# ip -6 route
2001:xxxx:xxxx:xxxx::/64 dev ens192 proto kernel metric 256 mtu 1480 pref medium
fe80::/64 dev ens192 proto kernel metric 256 mtu 1480 pref medium
default via fe80::ce46:d6ff:feb0:f6b1 dev ens192 proto ra metric 1024 expires 1747sec mtu 1480 hoplimit 64 pref high
30分後、私はこれを見ました:
# ip -6 route
2001:xxxx:xxxx:xxxx::/64 dev ens192 proto kernel metric 256 mtu 1480 pref medium
fe80::/64 dev ens192 proto kernel metric 256 mtu 1480 pref medium
default via fe80::ce46:d6ff:feb0:f6b1 dev ens192 proto ra metric 1024 expires -8sec mtu 1480 hoplimit 64 pref high
そして、その数秒後、私はこれを見ました:
# ip -6 route
2001:xxxx:xxxx:xxxx::/64 dev ens192 proto kernel metric 256 mtu 1480 pref medium
fe80::/64 dev ens192 proto kernel metric 256 mtu 1480 pref medium
tcpdumpは、システムがRAを受信していることを示します。
#tcpdump -vv ip6
tcpdump: listening on ens192, link-type EN10MB (Ethernet), capture size 262144 bytes
15:34:21.842483 IP6 (class 0xe0, hlim 255, next-header ICMPv6 (58) payload length: 96) fe80::ce46:d6ff:feb0:f6b1 > ip6-allnodes: [icmp6 sum ok] ICMP6, router advertisement, length 96
hop limit 64, Flags [none], pref high, router lifetime 1800s, reachable time 0s, retrans time 0s
source link-address option (1), length 8 (1): cc:46:d6:b0:f6:b1
0x0000: cc46 d6b0 f6b1
advertisement interval option (7), length 8 (1): 30000ms
0x0000: 0000 0000 7530
mtu option (5), length 8 (1): 1480
0x0000: 0000 0000 05c8
rdnss option (25), length 24 (3): lifetime 60s, addr: ordns.he.net
0x0000: 8075 0000 003c 2001 0470 0020 0000 0000
0x0010: 0000 0000 0002
prefix info option (3), length 32 (4): 2001:xxxx:xxxx:xxxx::/64, Flags [onlink, auto], valid time 2592000s, pref. time 604800s
0x0000: 40c0 0027 8d00 0009 3a80 0000 0000 2001
0x0010: XXXX XXXX XXXX 0000 0000 0000 0000
だから、tcpdumpはRAを見るので、ファイアウォールはRAをドロップしているに違いないと思った(私はUFWを使用してiptablesを管理している)。
だから私はufwを無効にし、tcpdumpで別のRAを見るまで待ちました。まだデフォルトルートはありません。
どうしたの?シンプルなものが欠けていますか?
編集:
システムをさらに掘り下げた後...ネットワークサービスが起動時に起動に失敗したようです。
# systemctl status networking
● networking.service - Raise network interfaces
Loaded: loaded (/lib/systemd/system/networking.service; enabled; vendor preset: enabled)
Drop-In: /run/systemd/generator/networking.service.d
└─50-insserv.conf-$network.conf
Active: failed (Result: exit-code) since Sun 2016-09-11 16:47:36 MST; 1min 39s ago
Docs: man:interfaces(5)
Process: 5650 ExecStart=/sbin/ifup -a --read-environment (code=exited, status=1/FAILURE)
Process: 5599 ExecStartPre=/bin/sh -c [ "$CONFIGURE_INTERFACES" != "no" ] && [ -n "$(ifquery --read-environment --list --exclude=lo)" ] && udevadm settle (cod=exited, status=0/SUCCESS)
Main PID: 5650 (code=exited, status=1/FAILURE)
Sep 11 16:47:31 asdf systemd[1]: Starting Raise network interfaces...
Sep 11 16:47:33 asdf ifup[5650]: /sbin/ifup: waiting for lock on /run/network/ifstate.ens192
Sep 11 16:47:35 asdf ifup[5650]: RTNETLINK answers: File exists
Sep 11 16:47:35 asdf ifup[5650]: Failed to bring up ens192.
Sep 11 16:47:36 asdf systemd[1]: networking.service: Main process exited, code=exited, status=1/FAILURE
Sep 11 16:47:36 asdf systemd[1]: Failed to start Raise network interfaces.
Sep 11 16:47:36 asdf systemd[1]: networking.service: Unit entered failed state.
Sep 11 16:47:36 asdf systemd[1]: networking.service: Failed with result 'exit-code'.
# journalctl -xe
Sep 11 16:47:35 asdf sh[5593]: RTNETLINK answers: File exists
Sep 11 16:47:35 asdf sh[5593]: Failed to bring up ens192.
Sep 11 16:47:35 asdf systemd[1]: [email protected]: Main process exited, code=exited, status=1/FAILURE
Sep 11 16:47:35 asdf ifup[5650]: RTNETLINK answers: File exists
Sep 11 16:47:35 asdf ifup[5650]: Failed to bring up ens192.
Sep 11 16:47:36 asdf systemd[1]: networking.service: Main process exited, code=exited, status=1/FAILURE
Sep 11 16:47:36 asdf systemd[1]: Failed to start Raise network interfaces.
さて...それについて私にとって興味深いのは、これを行う場合です:
# ifdown --force ens192 && ifup ens192
RTNETLINK answers: No such process
RTNETLINK answers: Cannot assign requested address
Waiting for DAD... Done
root@az-unixweb-1:~# ip -6 route
2001:xxxx:xxxx:xxxx::/64 dev ens192 proto kernel metric 256 pref medium
fe80::/64 dev ens192 proto kernel metric 256 mtu 1500 pref medium
default via 2001:xxxx:xxxx:xxxx::1 dev ens192 metric 1024 pref medium
Ifdown --forceを実行した後、ネットワークサービスを正常に開始および停止することもできます。
ご覧のとおり、今では/ etc/network/interfacesファイルから設定を取得しています。これは次のようになります。
auto lo
iface lo inet loopback
iface ens192 inet static
address a.b.c.d
netmask 255.255.255.224
gateway a.b.c.r
dns-nameserver a.b.c.dns
iface ens192 inet6 static
address 2001:xxxx:xxxx:xxxx::44
netmask 64
gateway 2001:xxxx:xxxx:xxxx::1
dns-nameserver 2001:xxxx:xxxx:xxxx::42
dns-nameserver 2001:470:20::2
auto ens192
この構成では、上記のルーティングテーブルが提供するものを正確に期待しています。私が最初に質問した後、この構成は変更されていません。再起動すると、サービスは再び失敗し、自動構成されたアドレスに加えて構成済みのアドレスを使用し、RAアドバタイズされたルートのみを使用するようになります(30分間)。
だから...それはまだ壊れており、起動時にネットワークサービスに依存しているサービスも起動時に失敗します。
完全に静的な構成が必要だったので、実際には理想的なソリューションではありませんが、現在は機能する構成があります。
/etc/network/interfaces
ファイルからゲートウェイ行を削除して再起動しました。これにより、ネットワーキングサービスが起動時に開始され、RAメカニズムを介してデフォルトルートが設定されました。違いは、ルーターがRAを送信するときに、ルートが実際に30秒ごとに更新されるのに対して、以前は、そのファイルで指定されたゲートウェイ行では、RAルートが更新されず、最終的にタイムアウトになることです。
正直なところ、これは基本的な何かを見逃さない限り、バグのように感じます...