僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
動的にルーティングテーブルが追記される。
例えばYamaha ルータでLAN内のゲートウェイを二重化すると、
デフォルトゲートウェイしか知らないLinuxやFreeBSDでは
ルータからicmp redirect通知を受け取り、
以後、そちらをゲートウェイとしてデータを送信するようになる。
定義されていない行き先については、やはりデフォルトゲートウェイに
転送している。
が、この通知を取り消す方法が分からない。
変えた転送先をいつまでも覚えているように見える。
あるとすればルーティングテーブルの初期化か、
追加したルータ側からくらいだろうか。
$ sudo ip route flush dev $IF $ sudo ip route add default via $ADDR
iptablesでicmp redirectを落とすように設定すると、
Windows(やraspbian)同様、redirect先にデータを送信しなくなった。
$ sudo iptables -A INPUT -p icmp --icmp-type 5 -j DROP
この場合、ping(1)は、
0. ホストからpingがデフォルトゲートウェイにecho requestが送信され、
1. デフォルトゲートウェイからルータ2に転送し、
2. ルータ2から(転送を重ねて)宛先に転送し、
3. 宛先から(転送を重ねて)ルータ2に返送され、
4. ルータ2からホストにecho replyが返る
というあたりになる。らしい。
redirect を調べるに当たり、どのMACアドレスの 機器にデータを送受信しているか調べてみる。
$ sudo tcpdump -n -v -i br0 ether dst $MAC_ADDR tcpdump: listening on br0, link-type EN10MB (Ethernet), \ capture size 262144 bytes 14:26:36.949258 IP (tos 0x0, ttl 64, id 38763, offset 0,\ flags [DF], proto ICMP (1), length 84) $IP_SRC_HOST > $IP_DST_HOST: ICMP echo request, \ id 5087, seq 9, length 64
仮想からリアルに移す。
できれば一般ユーザでやりたかったが、デバイス/dev/mdctlの書き込み
がrootでないとできないようだ(変えても動くかは要確認)。
$ grep -v "^$\|^#" config board_setup RaspberryPi option ImageSize 8192mb option Growfs option User pi option SwapFile 1024mb [deferred] [file=/swapfile0] option UsrSrc option Ntpd FREEBSD_SRC=$DIR
流石に仮想でない環境は速い。i5(2.67GHz)+4GBだけど。
以下、
typescriptログ(若干編集済み)より。
$ time sudo sh crochet.sh -c ./config Starting at 2016年 7月21日 木曜日 15時33分27秒 JST Loading configuration from ./config Board: RaspberryPi Option: ImageSize 8192mb Option: Growfs Option: User pi Option: SwapFile 1024mb [deferred] [file=/swapfile0] Option: UsrSrc Option: Ntpd Source version is: 303122 Building FreeBSD version: 12.0 // Installing ubldr in boot Adding user pi with password pi SwapFile: Swapfile will be 1024 MB SwapFile: Unrecognized parameter '[deferred]' real 77m17.415s user 263m58.365s sys 11m45.250s
一応起動できたようだ。
$ uname -a FreeBSD raspberry-pi 12.0-CURRENT FreeBSD 12.0-CURRENT #0 r303122: Thu Jul 21 16:45:19 JST 2016 \ root@$BSDHOST:$DIR/crochet/work/obj/arm.armv6/$DIR/work/source/sys/RPI-B arm
リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。