タイトルの通りですが、↓みたいなのを書いて(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でエラーが出るので残しておくか。。。