トップ «前の日記(2016-07-20(Wed)) 最新 次の日記(2016-07-22(Fri))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2016-07-21(Thu) ふえたいこを

icmp-redirect

動的にルーティングテーブルが追記される。
例えば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が返る

というあたりになる。らしい。

tcpdump ether

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

crochet

仮想からリアルに移す。
できれば一般ユーザでやりたかったが、デバイス/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

またfacebook.com

connect fb

今度はアクセスして、ログインして、pingが平常に戻るまで 待っただけ。

そんだけ

 


リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。

index.htmlは ここから。