前回BeagleBone BlackとChromebookをUSB接続できるようになりました。しかしこの状態ではBeableBone Blackからインターネットに接続できません。Chromebookをルーターとして機能させるためにIPフォワードとファイアウォールの設定をします。
Chromebookの設定
BeagleBone Black USB Ethernet definitionsを参考にChromebookの設定をします。
ctrl + alt + t
でcrosh > shellを起動します。
crosh> shell
BeagleBone Blackを接続した状態でifconfigを確認します。eth0
がBeagleBone BlackからUSB-Ethernet接続するインタフェースで、mlan0
がChromebookからインターネットへつながる無線LANのインタフェースです。
$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.7.1 netmask 255.255.255.252 broadcast 192.168.7.3
inet6 fe80::9259:afff:fe58:32d3 prefixlen 64 scopeid 0x20<link>
ether 90:59:af:58:32:d3 txqueuelen 1000 (Ethernet)
RX packets 208 bytes 24036 (23.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 89 bytes 11263 (10.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 202 bytes 13036 (12.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 202 bytes 13036 (12.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
mlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.12 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::d2e7:82ff:feba:ddb7 prefixlen 64 scopeid 0x20<link>
ether d0:e7:82:ba:dd:b7 txqueuelen 1000 (Ethernet)
RX packets 2485 bytes 1233319 (1.1 MiB)
RX errors 0 dropped 24 overruns 0 frame 0
TX packets 2404 bytes 456542 (445.8 KiB)
TX errors 4 dropped 0 overruns 0 carrier 0 collisions 0
ChromebookのIPフォワードを有効にします。
$ echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward > /dev/null
iptablesのルールを追加してeth0からmlan0を経由してインターネットへ接続できるようにNATします。
$ sudo iptables -t nat -A POSTROUTING -o mlan0 -j MASQUERADE
mlan0とeth0の間は双方向でフォワードを許可します。
$ sudo iptables -A FORWARD -i mlan0 -o eth0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
$ sudo iptables -A FORWARD -i eth0 -o mlan0 -j ACCEPT
BeagleBone BlackのUbuntu 14.04 (SDカード)
Chromebookから BeagleBone BlackにSSH接続します。
- username: ubuntu
- password: temppwd
$ ssh ubuntu@192.168.7.2
usb0インタフェースの設定は以下のように静的に定義しています。
...
auto usb0
iface usb0 inet static
address 192.168.7.2
netmask 255.255.255.252
network 192.168.7.0
gateway 192.168.7.1
ルーティングを確認します。
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.7.1 0.0.0.0 UG 0 0 0 usb0
192.168.7.0 0.0.0.0 255.255.255.252 U 0 0 0 usb0
デフォルトゲートウェイの設定は正常に読み込まれていますが、表示されない場合は以下のように追加します。
$ sudo route add default gw 192.168.7.1
/etc/resolvconf/resolv.conf.d/base
にGoogleのDNSを追加します。
nameserver 8.8.8.8
nameserver 8.8.4.4
/etc/resolv.conf
に反映させます。
$ sudo resolvconf -u
$ cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 8.8.8.8
nameserver 8.8.4.4
pingで名前解決とインターネット接続を確認します。
$ ping -c 1 www.yahoo.co.jp
PING www.g.yahoo.co.jp (182.22.70.252) 56(84) bytes of data.
64 bytes from f5.top.vip.ssk.yahoo.co.jp (182.22.70.252): icmp_seq=1 ttl=54 time=9.71 ms
--- www.g.yahoo.co.jp ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 9.718/9.718/9.718/0.000 ms
BeagleBone Blackはバッテリがないので電源を入れたあとはシステムクロックの時間あわせをします。
$ ntpdate -b -s -u pool.ntp.org