Sunday, February 22, 2015

Private network for Raspberry Pi with VyOS on virtual box under WiMax internet connection

妙ちくりんなタイトルだけど、必要に迫られてやった。

必要に迫られた悲しい背景

  • 自宅のネット環境はWi-Maxのルータのみ。
  • Raspberry PiにWiFiドングル挿して上のルータからIPもらえるけど通信が凄まじく不安定
    • sshログインするも、反応が悪くて使い物にならない

ほんだい

というわけで、こんなことを考えたのだ。

                        en1^eth0:192.168.100.103
                          /
                         /---- en0^eth1:172.16.1.1/24
                       [vyos] 
                          |
                       <bridge>...(virtualbox)
                          |
~-[WiMax Router]--<無線>--[iMac]--<有線>--[L2スイッチ]--<有線>--[RPi]
   /                      /-- en0:172.16.1.200/24             /
 192.168.100.1          en1:192.168.100.100                 eth0:172.16.1.201
  • [WiMax Router]の左先はインターネット行き。

iMacは無線用のNIC(en1)と有線用のNIC(en0)を2つ持っている。で、無線用のen1はWiMaxルーターに接続していて、これがインターネットに繋がっている。普通は無線がインターネットの環境って外出先か、固定回線引くのをケチって自宅でも使っている残念な人(わたくしめです)しかいない。

で、当然ながら有線用のen0が余っているので、こいつをプライベートネット用に使う。OSXにルーターやらせるのも変(そもそも出来るかも調べてない)なので、virtualbox上でルーター専門のOS?であるVyOSを動かして、こいつにプライベートネットを管理(主にdhcpサーバー)してもらおうと考えた!

  • Rpiのeth0とiMacのen0はiMacのVirtualbox上で動いているVyOS君が提供しているdhcpサービスからIPアドレスを貰うよ。
  • VyOSにNAT(IPマスカレード)を設定してRpiからインターネットに疎通できるようにするよ。

と、やりたい事は至ってシンプル…!では、さっそくやっていく。

L2スイッチは、ヨドバシで適当なものを買ってきてiMacとRpiを繋いである。

VyOSの設定

スイッチ類の接続が終わったら、基本VyOS上でがちゃがちゃコマンドを打つだけ。

ここからvyos-1.1.3-amd64.isoをダウンロード。
virtual boxの仮想マシンを作成。

仮想マシンのスペック

  • Linux (Debian 64bit)
  • プロセッサ x1
  • Memory 1G
  • Disk 10G
  • ブリッジアダプタ en1 - インターネット接続
  • ブリッジアダプタ en0 - プライベートネット接続

インストール

isoファイルをvirtualbox上でマウントして起動。vyos/vyosでログインしてインストールコマンドを叩く。

vyos@vyos:~$ install system

色々と聞かれるけども、基本的にデフォルトのままでいい。Yes/Noで聞かれるところはYesと打っておかないと先に進まない所が一箇所。

インストール完了後、念のため再起動をかけた。もちろんマウントしたisoは抜いておく。

sshログインの設定とか

# WiMaxルーターからIPアドレスをモラウノデス
$ configure
$ set interfaces ethernet eth0 address dhcp
$ set interfaces ethernet eth0 description 'external'
# sshサービスを起動. 22番ポートで待ち受け
$ set service ssh port '22'
$ commit
$ save
$ exit

この時点でshow interfacesでNICの状態を確認すると、WiMaxルーターからIPアドレス貰えてるはず。このIPでもsshログインできるけど、eth1に静的IPアサインしてから、そのIPでホストマシンからsshログインしたほうがマシかな。

初期設定

利用可能なプライベート用IPアドレスは172.16.1.0/24にした。VyOSに静的にIPアドレス(172.16.1.1)を振る。

vyos@vyos:~$ configure
vyos@vyos# set interfaces ethernet eth1 address 172.16.1.1/24     
vyos@vyos# commit
# ただの確認. IPアドレスが設定された!
vyos@vyos# show interfaces
 ethernet eth0 {
     address dhcp
     description external
     duplex auto
     hw-id 08:00:27:bf:73:20
     smp_affinity auto
     speed auto
 }
 ethernet eth1 {
     address 172.16.1.1/24
     duplex auto
     hw-id 08:00:27:53:ca:af
     smp_affinity auto
     speed auto
 }
 loopback lo {
 }
# 設定反映
vyos@vyos# save
vyos@vyos# exit

続いてdhcpサービスを起動させる。

vyos@vyos:~$ configure
# DHCPの割り当てレンジは200〜250。51台も使うと思えないが!
vyos@vyos# set service dhcp-server shared-network-name yukayatta subnet 172.16.1.0/24 start 172.16.1.200 stop 172.16.1.250
vyos@vyos# set service dhcp-server shared-network-name yukayatta subnet 172.16.1.0/24 default-router 172.16.1.1
# DNSはとりあえずgoogle先生のところでいいか...(8.8.8.8)
set service dhcp-server shared-network-name yukayatta subnet 172.16.1.0/24 dns-server 8.8.8.8
vyos@vyos# commit
vyos@vyos# save
Saving configuration to '/config/config.boot'...
Done
vyos@vyos# exit
  • yukayattaは適当に付けただけ。

続いてNATの設定。RPiに割り振られる予定のプライベートIPアドレス(172.16.1.2XX)だとインターネットに出れないので、WiMaxルーター側のIPアドレス(192.168.100.10X - VyOSのeth0に割り当たったIPアドレス)に変換するよ。更にWiMaxルーター側でこれを本当のグローバルIPに変換しているんだろうけど、その辺はいいや。

vyos@vyos:~$ configure
vyos@vyos# set nat source rule 1 source address 172.16.1.0/24
vyos@vyos# set nat source rule 1 outbound-interface eth0     
vyos@vyos# set nat source rule 1 translation address masquerade
vyos@vyos# commit
vyos@vyos# save
vyos@vyos# exit

これで設定完了。ソースNAT。172.16.1.0/24のレンジのIPアドレスをマスカレード方式でeth0側のIPアドレスに変換する…で合ってるかな。

以上、ここまででVyOS上でdhcpサービスが稼働し、プライベートアドレスをRPiとiMacのen0に対して割り当ててくれるはず…!更にNATでRPiはインターネットに繋がるんじゃないかな!

接続の確認

iMac

まずはiMac側から、最初、en0に謎のIPアドレス(167.xxx.xxx.xxx うろ覚え)が割り振られていて?状態。ネットワークの設定画面を開く。

[システム環境設定] -> [ネットワーク]
  • Ethernetを選択
  • IPv4の設定 … DHCPサーバーを使用
    *「詳細」ボタンを押して、最初のタブ「TCP/IP」
  • 「DHCPリースを更新」ボタンをぽちっと

IPアドレス(172.16.1.200)をVyOS(172.16.1.1)から貰えた。やったぜ。

ついでにここで、ネットワークの優先度で「Wi-Fi」を「Ethernet」より高くしておく。こうしとかないとiMacがインターネットに繋がらなくなる。Ethernet側(プライベートネット)をデフォルトルートとして見ようとするのかな。残念、そっちじゃないんだ。

Raspberry Pi 2 Model B

最近届いたばかりの新しいやつ。スイッチを介してiMac(上のVyOS)に繋がっている。

  • おもむろに電源を繋ぐ。
  • iMacが172.16.1.200を貰ってたから、こいつは172.16.1.201かな?
yukaarybox:~ yukaary$ ssh pi@172.16.1.201
Linux raspberrypi 3.18.7-v7+ #755 SMP PREEMPT Thu Feb 12 17:20:48 GMT 2015 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sun Feb 22 06:54:10 2015 from 172.16.1.200
pi@raspberrypi ~ $ 

やったぜ。ちゃんとインターネットにも繋がるんだよ。

pi@raspberrypi ~ $ traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  172.16.1.1 (172.16.1.1)  2.330 ms  2.079 ms  1.961 ms
 2  192.168.100.1 (192.168.100.1)  6.115 ms  6.021 ms  6.550 ms
 3  * * *
 4  * * *
 5  172.23.113.114 (172.23.113.114)  83.143 ms  83.268 ms  86.616 ms
 6  tm4BBAC04.bb.kddi.ne.jp (27.93.199.133)  86.978 ms  27.442 ms  51.828 ms
 7  otejbb206.bb.kddi.ne.jp (106.162.175.253)  52.459 ms otejbb206.bb.kddi.ne.jp (106.162.175.133)  34.010 ms otejbb206.int-gw.kddi.ne.jp (59.128.99.157)  46.505 ms
 8  ix-ote213.int-gw.kddi.ne.jp (59.128.5.90)  46.071 ms ix-ote213.int-gw.kddi.ne.jp (59.128.5.110)  48.596 ms  49.541 ms
 9  72.14.204.58 (72.14.204.58)  120.051 ms  120.324 ms  120.032 ms
10  72.14.237.70 (72.14.237.70)  58.954 ms 209.85.240.216 (209.85.240.216)  60.565 ms 72.14.236.185 (72.14.236.185)  43.049 ms
11  209.85.255.141 (209.85.255.141)  51.124 ms 209.85.254.177 (209.85.254.177)  51.268 ms 209.85.254.185 (209.85.254.185)  48.890 ms
12  google-public-dns-a.google.com (8.8.8.8)  62.058 ms  52.852 ms  51.117 ms

tracerouteで確認。ちゃんとVyOSルーターを介して外に出ていっているね。ここここれで、Rasberry Piを安定して利用する環境が整ったんじゃないかなっ。今まで突発的に接続切れる現象が多発して使いものにならなかったから…。