Raspberry Pi 3 (Raspbian Jessie) でルーティングの設定をしてみた(2)
Wi-Fi側もルーター越えできるようになりました
あれから1日ほどジタバタしてました。直接の原因は、
auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
post-up /sbin/ip rule add from 192.168.0.200 table 100 prio 10000
post-up /sbin/ip route add 192.168.0.0/24 dev wlan0 src 192.168.0.200 table 100
post-up /sbin/ip route add default via 192.168.0.1 dev wlan0 table 100
post-down /sbin/ip route del default table 100
post-down /sbin/ip route del 192.168.0.0/24 table 100
post-down /sbin/ip rule del table 100 prio 10000
|
赤字の箇所で"RTNETLINK answers: Invalid argument" というエラーが発生していた事でした。ただ、どれが無効な引数(Invalid argument)なのかは示してくれないという、何とも不親切なエラーメッセージなのでした。
試行錯誤した結果、"src 192.168.0.200" が無ければエラーは発生しない事が分かりました。(でも何故"src 192.168.0.200" が無効な引数なのかは結局分からず。(*1))これが無くても、本来の目的は果たせますよね。最終的な設定は以下のようになります。
auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
post-up /sbin/ip rule add from 192.168.0.200 table 100 prio 10000
post-up /sbin/ip route add 192.168.0.0/24 dev wlan0 table 100
post-up /sbin/ip route add default via 192.168.0.1 dev wlan0 table 100
post-down /sbin/ip route del default table 100
post-down /sbin/ip route del 192.168.0.0/24 table 100
post-down /sbin/ip rule del table 100 prio 10000
|
ルーティングテーブルは、
# ip rule show
0: from all lookup local
10000: from 192.168.0.200 lookup wifi
32766: from all lookup main
32767: from all lookup default
# ip route show table wifi
default via 192.168.0.1 dev wlan0
192.168.0.0/24 dev wlan0 scope link
|
という設定になりました。これで192.168.0.200 から入ってきたものに対しては、自サブネット内への通信の場合には wlan0デバイスを使い、サブネット外への場合は wlan0デバイスから192.168.0.1 (ゲートウェイ)へ送るようになるはず。
# ip route get 192.168.0.100
local 192.168.0.100 dev lo src 192.168.0.100
cache <local>
# ip route get 192.168.0.200
local 192.168.0.200 dev lo src 192.168.0.200
cache <local>
|
(*1):"ip route add help" でヘルプを表示させてみると、
Usage: ip route { add | del | change | append | replace } ROUTE
ROUTE := NODE_SPEC [ INFO_SPEC ]
NODE_SPEC := [ TYPE ] PREFIX [ tos TOS ]
[ table TABLE_ID ] [ proto RTPROTO ]
[ scope SCOPE ] [ metric METRIC ]
INFO_SPEC := NH OPTIONS FLAGS [ nexthop NH ]...
NH := [ via ADDRESS ] [ dev STRING ] [ weight NUMBER ] NHFLAGS
OPTIONS := FLAGS [ mtu NUMBER ] [ advmss NUMBER ]
[ rtt TIME ] [ rttvar TIME ] [ reordering NUMBER ]
[ window NUMBER] [ cwnd NUMBER ] [ initcwnd NUMBER ]
[ ssthresh NUMBER ] [ realms REALM ] [ src ADDRESS ]
[ rto_min TIME ] [ hoplimit NUMBER ] [ initrwnd NUMBER ]
[ quickack BOOL ]
|
(一部だけ抜粋)なので、"src 192.168.0.200" は引数として書けると思うんだけどなぁ〜ま、いっかぁ
|