前回 BeagleBone BlackとChromebookをUSB接続できるようになりました。しかしこの状態ではBeableBone Blackからインターネットに接続できません。Chromebookをルーターとして機能させるためにIPフォワードとファイアウォールの設定をします。
Chromebookの設定 BeagleBone Black USB Ethernet definitions を参考にChromebookの設定をします。
ctrl + alt + t
で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
usb0インタフェースの設定は以下のように静的に定義しています。
/etc/network/interfaces ... 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を追加します。
/etc/resolvconf/resolv.conf.d/base nameserver 8.8.8.8 nameserver 8.8.4.4
/etc/resolv.conf
に反映させます。
$ sudo resolvconf -u $ cat /etc/resolv.conf 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