NomadBSDを試す 第四話
本日は2021年8月19日(木)、天気は快晴です。 盛夏そのものです。
ここ数日前線が日本の上空に滞留していたので天候が不順でした。 まだ大雨に注意が必要なようです。
既にご案内のとおり、今年6月に買った中古のDynabook R634/MにはNomadBSD(中身はFreeBSD 13.0-RELEASE+Openbox)がインストールしてあります。 あろうことかFreeBSDなのにWi-Fiが気軽に使えているのでandroidなスマートフォンからのWi-Fiテザリングが可能です。 FreeBSDをインストールしたラップトップPCをどこかに持ち出してもインターネットに接続できるわけです。 Wi-FiもEthernet(いわゆる有線LAN)がない場所でも、FreeBSDマシンでインターネット接続ですよ。 ロマンですね。(笑)
今回は更に調子に乗ってスマートフォンからUSBテザリングで有線でFreeBSDマシンにインターネットまでご案内しようという企画です。
Wi-Fiテザリングができればそれでいいじゃん。 わざわざケーブルつないでインターネットって、いまどきどういう趣味?と疑問に思う方もいるかもしれません。
ご説明します。
私はコンピュータに関する限り無線というものが好きでありません。
以上です。
それはともかく、なぜUSBテザリングにこだわるのか?
世の中には場合によっては長く滞在しなければならないけれど、有線LAN(イーサネット)はない、Wi-Fiは厳禁、携帯電話回線だけは許されるという厳しい環境があるのです。
わかる人にはわかると思いますが、その厳しい環境というのは、一部の大きな病院の病棟です。 私がかつて入院した病院では、実際にWi-Fiが厳禁でした。 イーサネットが引いてある個室ベッドもあるのですが、そんな病床を使用すると目の玉が飛び出るような差額ベッド代がかかります。医療保険に入っていれば、2日や3日そういう個室を利用して羽根を伸ばすのもいいと思いますけどね。周りを気にせずイヤホンなしで音楽や落語やラジオを聞いてもいいのですから。
だから、いざとなったらUSB有線テザリングを受けられるというのはPCにとっては重要なことなのです。
ちなみにLinux、特にUbuntuであれば、androidスマートフォンからUSBテザリングを受けるなんてことは笑っちゃうくらい簡単なことです。 適切な設定をしたスマートフォンと適切なUSBケーブルを使ってUbuntuマシンとスマートフォンをつなぐと、いきなりインターネット接続してしまったりします。
つくづく、Ubuntuおそるべし。
私は、FreeBSDでもこれができたら、ビューティフルだなぁ、と思いました。
入院の予定はないですし、あまり入院したくないですけれど。 有備無患ともいいますからね。
まず、ifconfigの結果。 各ネットワークインターフェイスをざっと説明します。
em0というのは、Ethernetインターフェイスです。 いわゆる有線LAN。 LANケーブル経由です。
lo0: Loopbackインターフェイス。 自分自身のことです。
wlan0は、Wi-Fiインターフェイス。 いわゆる無線LAN。
ue0: USBインターフェイス。 USB(有線)テザリングした時のネットワークインターフェイス。
下の例では、em0はEthernetケーブルを抜いているのでno carrierです。
wlan0は自宅のWi-Fiルーター(正確には無線ハブ)の電源を落としているのでno carrier。
EthernetとWi-Fiが使えない状態でPCの電源を入れてFreeBSDが起動しているので、これでいいのです。
ue0は、いくつかの手順を踏んだらつながっていました。
ゲートウェイになっているのはandroidスマートフォン、HTCのU11 HTV33。
# 2021-08-08 FreeBSD 13.0-RELEASE # After USB Tethering # Wi-fi router turned off # Ethernet unplugged # # Command # # ifconfig em0: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=481249b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,WOL_MAGIC,VLAN_HWFILTER,NOMAP> ether b8:6b:23:44:62:7f inet6 fe80::ba6b:23ff:fe44:627f%em0 prefixlen 64 scopeid 0x1 media: Ethernet autoselect status: no carrier nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL> lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384 options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6> inet6 ::1 prefixlen 128 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2 inet 127.0.0.1 netmask 0xff000000 groups: lo nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL> wlan0: flags=8c43<UP,BROADCAST,RUNNING,OACTIVE,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether 28:b2:bd:7e:b1:a2 inet6 fe80::2ab2:bdff:fe7e:b1a2%wlan0 prefixlen 64 scopeid 0x3 groups: wlan ssid "" channel 1 (2412 MHz 11g) regdomain JAPAN country JP authmode WPA1+WPA2/802.11i privacy MIXED deftxkey UNDEF txpower 23 bmiss 10 scanvalid 60 protmode CTS wme roaming MANUAL parent interface: iwm0 media: IEEE 802.11 Wireless Ethernet autoselect (autoselect) status: no carrier nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL> ue0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether 46:22:c1:8d:9e:39 inet 192.168.42.23 netmask 0xffffff00 broadcast 192.168.42.255 nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
どうやらHTV33からプライベートIPアドレス 192.168.42.23 をもらってUSBテザリングが成立しているらしいです。
HTV33がUSBテザリングをすると、192.168.42.0/24というネットワークを構築し、今回は0.0.0.23というホストIPアドレスをFreeBSDなPCに貸し出したようです。 HTV33自身がゲートウェイになっており、そのIPアドレスは192.168.42.129なようです。 なぜ192.168.42.1でないのか、謎ですが、これはどうやら、ちょっと旧いandroidの仕様らしいです。
ルーティングが出来ているか、確認しましょう。
FreeBSDでは
netstat -rn
というコマンドを使います。
Linuxの場合はrouteというコマンドです。
netstat -rnの結果。
root@NomadBSD:~ # uname -a FreeBSD NomadBSD 13.0-RELEASE-p3 FreeBSD 13.0-RELEASE-p3 #0: Tue Jun 29 19:46:20 UTC 2021 root@amd64-builder.daemonology.net:/usr/obj/usr/src/amd64.amd64/sys/GENERIC amd64 root@NomadBSD:~ # date 2021年 8月 8日 日曜日 16時53分12秒 JST root@NomadBSD:~ # netstat -rn Routing tables Internet: Destination Gateway Flags Netif Expire default 192.168.42.129 UGS ue0 127.0.0.1 link#2 UH lo0 192.168.42.0/24 link#4 U ue0 192.168.42.23 link#4 UHS lo0 Internet6: Destination Gateway Flags Netif Expire ::/96 ::1 UGRS lo0 ::1 link#2 UHS lo0 ::ffff:0.0.0.0/96 ::1 UGRS lo0 fe80::/10 ::1 UGRS lo0 fe80::%em0/64 link#1 U em0 fe80::ba6b:23ff:fe44:627f%em0 link#1 UHS lo0 fe80::%lo0/64 link#2 U lo0 fe80::1%lo0 link#2 UHS lo0 fe80::%wlan0/64 link#3 U wlan0 fe80::2ab2:bdff:fe7e:b1a2%wlan0 link#3 UHS lo0 ff02::/16 ::1 UGRS lo0 root@NomadBSD:~ #
default の行のgatewayのフィールドに192.168.42.129とあります。これがandroidスマートフォンのHTV33のIPアドレスです。
IPv4の最後の行の192.168.42.23の目的地がlo0(自分自身)になっているので、これがFreeBSDが動いているDynabookのIPアドレスです。
接続の確認をしましょう。pingのお時間ですよ。
# ping -c 10 www.freebsd.org PING wfe0.nyi.freebsd.org (96.47.72.84): 56 data bytes 64 bytes from 96.47.72.84: icmp_seq=0 ttl=43 time=302.245 ms 64 bytes from 96.47.72.84: icmp_seq=1 ttl=43 time=256.288 ms 64 bytes from 96.47.72.84: icmp_seq=2 ttl=43 time=212.202 ms 64 bytes from 96.47.72.84: icmp_seq=3 ttl=43 time=273.708 ms 64 bytes from 96.47.72.84: icmp_seq=4 ttl=43 time=368.193 ms 64 bytes from 96.47.72.84: icmp_seq=5 ttl=43 time=297.567 ms 64 bytes from 96.47.72.84: icmp_seq=6 ttl=43 time=364.147 ms 64 bytes from 96.47.72.84: icmp_seq=7 ttl=43 time=323.865 ms 64 bytes from 96.47.72.84: icmp_seq=8 ttl=43 time=275.318 ms 64 bytes from 96.47.72.84: icmp_seq=9 ttl=43 time=229.335 ms --- wfe0.nyi.freebsd.org ping statistics --- 10 packets transmitted, 10 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 212.202/290.287/368.193/49.311 ms
[A] 事前準備
# pkg install usbmuxd
インストールしたら、一旦FreeBSDが入ったDynabook R634/Mの電源を落とす。
[B] 実際にUSBテザリングの動作確認
# kldload if_ipheth.ko
(06) usbmuxdを実行。
# usbmuxd -vzU root
(07) dmesgでUSBテザリングのインターフェイスIDを確認。
# dmesg
# dhclient ue0
(11) これで接続達成したはずなので、確認します。 pingの時間。
# ping -c 10 www.freebsd.org
(12) ifconfigでIPアドレスなどを確認。
# ifconfig
(13) netstat -rnでルーティングテーブルを確認。
# netstat -rn
(14) (必要なかったけど)上記(01)〜(10)でテザリング接続に失敗した場合は、たぶんFreeBSD側でルーティングを手動で設定するとなんとかなる。
# route add -net 192.168.42.0/24 192.168.42.129
最後の192.168.42.129がゲートウェイです。
あるいは、以下のようにゲートウェイだけ手動設定。
# route add default 192.168.42.129

