tizen.moe

tizen.moe

/etc/network/interfacesのデバッグがしたかった

タイトルの通りですが、↓みたいなのを書いて(NetworkManagerは邪魔をするのでapt purgeして)再起動するという非効率な作業をしておりました。

auto eth0
iface eth0 inet static
   address 192.168.xx.yy
   netmask 255.255.255.0
   gateway 192.168.xx.1
   post-up route add default gateway 192.168.xx.1 metric 110
   post-up route deldefault gateway 192.168.xx.1 metric 100
   post-up route del default gateway 192.168.xx.1 metric 101
   post-up route del default gateway 192.168.xx.1 metric 0

で、↑だと

$ route -n
カーネルIP経路テーブル
受信先サイト    ゲートウェイ    ネットマスク   フラグ Metric Ref 使用数 インタフェース
0.0.0.0         192.168.xx.1    0.0.0.0         UG    0    0        0 eth0
0.0.0.0         192.168.xx.1    0.0.0.0         UG    110    0        0 eth0
192.168.xx.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0

消えてほしい metric 0 が消えてくれない、と。何が問題なのか判らないので困ったのですが、よく考えたら↑はifupしたときに実行されるらしいので起動してる状態で

$ sudo ifconfig eth0 down                        <- 一端落とす
$ sudo ifup eth0 -v                                    <- verboseオプションつけてifupする

とかしてあげるとエラーが出るということに今更気づきました。ここで「not configured」とか出る場合は「/run/network/ifstate」に

$ sudo vi /run/network/ifstate
lo=lo
eth0=eth0                 <-追加

しておくと、怒られなくなる模様です。*1で、「-v」の効果で

$ sudo ifup eth0 -v

ifup: configuring interface eth0=eth0 (inet)
/bin/run-parts --exit-on-error --verbose /etc/network/if-pre-up.d
run-parts: executing /etc/network/if-pre-up.d/bridge
run-parts: executing /etc/network/if-pre-up.d/wireless-tools
run-parts: executing /etc/network/if-pre-up.d/wpasupplicant
/sbin/ip addr add 192.168.xx.yy/255.255.255.0 broadcast 192.168.xx.255     dev eth0 label eth0
/sbin/ip link set dev eth0   up
 /sbin/ip route add default via 192.168.xx.1  dev eth0 onlink
route add default gateway 192.168.xx.1 metric 110
route del default gateway 192.168.xx.1 metric 100
SIOCDELRT: No such process
ifup: failed to bring up eth0

要するに存在しないmetric 100を削除しようとして「そんなもん無いよ」と怒られてる訳でした、と。
一端エラーになるとゴミが残るっぽく、ifdown→ifupがエラーになるのでflushする必要がある模様。

$ sudo ifdown eth0
ifdown: interface eth0 not configured
$ sudo ifup eth0 -v

ifup: configuring interface eth0=eth0  (inet)
/bin/run-parts --exit-on-error --verbose /etc/network/if-pre-up.d
run-parts: executing /etc/network/if-pre-up.d/bridge
run-parts: executing /etc/network/if-pre-up.d/wireless-tools
run-parts: executing /etc/network/if-pre-up.d/wpasupplicant
/sbin/ip addr add 192.168.xx.yy/255.255.255.0 broadcast 192.168.xx.255     dev eth0 label eth0
RTNETLINK answers: File exists                               <- すでにあるとかなんとか
ifup: failed to bring up eth0
$ sudo ip addr flush dev eth0
$ sudo ifdown eth0
ifdown: interface eth0 not configured
adachi@val:/etc/network$ sudo ifup eth0 -v

ifup: configuring interface eth0=eth0 (inet)
/bin/run-parts --exit-on-error --verbose /etc/network/if-pre-up.d
run-parts: executing /etc/network/if-pre-up.d/bridge
run-parts: executing /etc/network/if-pre-up.d/wireless-tools
run-parts: executing /etc/network/if-pre-up.d/wpasupplicant
/sbin/ip addr add 192.168.xx.yy/255.255.255.0 broadcast 192.168.xx.255     dev eth0 label eth0
/sbin/ip link set dev eth0   up                         <- ちゃんと上げに行った
 /sbin/ip route add default via 192.168.xx.1  dev eth0onlink
route add default gateway 192.168.xx.1 metric 110
route del default gateway 192.168.xx.1 metric 100
SIOCDELRT: No such process
ifup: failed to bring up eth0

とりあえず、エラーから metric 100 を消しに行ってエラーになってるので

auto eth0
iface eth0 inet static
   address 192.168.xx.yy
   netmask 255.255.255.0
   gateway 192.168.xx.1
   post-up route add default gateway 192.168.xx.1 metric 110
   post-up route del default gateway 192.168.xx.1 metric 0

みたいな感じにすると

$ sudo ifup eth0 -v

ifup: configuring interface eth0=eth0 (inet)
/bin/run-parts --exit-on-error --verbose /etc/network/if-pre-up.d
run-parts: executing /etc/network/if-pre-up.d/bridge
run-parts: executing /etc/network/if-pre-up.d/wireless-tools
run-parts: executing /etc/network/if-pre-up.d/wpasupplicant
/sbin/ip addr add 192.168.xx.yy/255.255.255.0 broadcast 192.168.xx.255     dev eth0 label eth0
/sbin/ip link set dev eth0    up
 /sbin/ip route add default via 192.168.xx.1  dev eth0  onlink
route add default gateway 192.168.xx.1 metric 110
route del default gateway 192.168.xx.1 metric 0
/bin/run-parts --exit-on-error --verbose /etc/network/if-up.d
run-parts: executing /etc/network/if-up.d/000resolvconf
run-parts: executing /etc/network/if-up.d/avahi-autoipd
run-parts: executing /etc/network/if-up.d/avahi-daemon
run-parts: executing /etc/network/if-up.d/openvpn
run-parts: executing /etc/network/if-up.d/postfix
run-parts: executing /etc/network/if-up.d/static-routes
run-parts: executing /etc/network/if-up.d/ubuntu-fan
run-parts: executing /etc/network/if-up.d/wpasupplicant

$ route -n
カーネルIP経路テーブル
受信先サイト    ゲートウェイ    ネットマスク   フラグ Metric Ref 使用数 インタフェース
0.0.0.0         192.168.xx.1    0.0.0.0         UG    110    0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0
192.168.xx.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0

期待通りのルーティングにはなったけどnetアドレスでゴミが載るようになった?

post-up route del -net 169.254.0.0 netmask 255.255.0.0 metric 1000

で消せそうな気がするけどifupでエラーが出るので残しておくか。。。

*1:エラーが出ない設定を書いてあれば不要な気がします、たぶん。。。