虎の穴開発室ブログ

虎の穴ラボ株式会社所属のエンジニアが書く技術ブログです

MENU

VyOSを使った純粋なルータ作り

こんにちは、虎の穴ラボのH.Y.です。(激似)


最近、ギガが減るという単語が一般的に使われてきましたね。
というわけで、ネットワークをネタに
VyOSをつかった純粋なルータ(L3パケット交換のみの機能)作りをしてみようと思います。

そもそも、VyOSとはオープンソースのネットワークOSで、
PCに入れてネットワーク機器としてしまうときに使います。
Debianベースですが、Linuxで使えるコマンドは、ほぼ使えません。


今回は、富士通PRIMERGY TX100 S3を使用します。
f:id:toranoana-lab:20181126113554j:plain
(今回は右側のマシン。左側はマイニングマシンとして使ったマシン)
マイニングマシンの記事はこちら
格安サーバを使ったモナコイン向けマイニングマシン - 虎の穴 開発室ブログ



この機種は、LANポートが2つあるのでルータとしても使用しやすいです。

VyOSのインストール

IOSは本家のページからダウンロードします。
VyOS - an Open Source Linux-based Network OS

VyOSのインストールは以下の記事を参考にしました。
VyOS のインストール&初期セットアップ - らくがきちょう

インストール自体は、基本デフォルトでインストールしたので、5分程度で完了しました。

※インストール直後のネットワーク図
f:id:toranoana-lab:20181126125647p:plain

IPアドレスの指定とsshのインストール

ルーターとして使用するために、interfaceにipアドレスを設定します。
ついでに、マシンと作業スペースが遠いのでsshの有効化も行います。

'編集モードに移行'
$ configure

'interfaceのIP設定の確認'
# show interfaces ethernet
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface        IP Address                        S/L  Description
---------        ----------                        ---  -----------
eth0             -                                 u/u
eth1             -                                 u/u

'interfaceのIP設定'
# set interfaces ethernet eth0 address 192.168.100.201/24
# set interfaces ethernet eth1 address 192.168.101.1/24

'sshを有効化'
# set service ssh

'設定のコミットと保存'
# commit
# save

'interfaceのIP設定の確認'
# show interfaces ethernet
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface        IP Address                        S/L  Description
---------        ----------                        ---  -----------
eth0             192.168.100.201/24                u/u
eth1             192.168.101.1/24                  u/u

sshとeth0にIPアドレスを設定したので、

user:vyos
password:インストール時のパスワード
でsshで操作できるようになります。

※設定後のネットワーク図(eth1はスイッチと繫がっているが省略)
f:id:toranoana-lab:20181126150941p:plain

外と繋ぐ。

ブロードバンドルーターにはつながっては居ますが、

# ping 8.8.8.8
connect: Network is unreachable

外のネットワークに接続できません。

# show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
       I - ISIS, B - BGP, > - selected route, * - FIB route

C>* 127.0.0.0/8 is directly connected, lo
C>* 192.168.100.0/24 is directly connected, eth0
C>* 192.168.101.0/24 is directly connected, eth1

ルーティングテーブルを見て、デフォルトゲートウェイへのルーティングが存在しないことがわかります。

なので、デフォルトゲートウェイ(ブロードバンドルーター)にパケットを飛ばすためスタティックルーティングを設定します。

# set protocols static route 0.0.0.0/0 next-hop 192.168.100.1
# commit
# save

ブロードバンドルーター(192.168.100.1)の経路の設定を行いました。

# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_req=1 ttl=121 time=3.73 ms
64 bytes from 8.8.8.8: icmp_req=2 ttl=121 time=3.96 ms


# show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
       I - ISIS, B - BGP, > - selected route, * - FIB route

S>* 0.0.0.0/0 [1/0] via 192.168.100.1, eth0
C>* 127.0.0.0/8 is directly connected, lo
C>* 192.168.100.0/24 is directly connected, eth0
C>* 192.168.101.0/24 is directly connected, eth1

pingも問題なく帰ってきており、ルーティングテーブルも大丈夫そうです。

ダイナミックルーティングを使いたい

ブロードバンドルーターがダイナミックルーティングであるRIPに対応しているため、
VyOSでも動作しているかを確認してみます。

# set protocols rip interface eth0
# set protocols rip interface eth1
# commit
# save

RIPの広告対象のインターフェイスを設定しました。

# show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
       I - ISIS, B - BGP, > - selected route, * - FIB route

R   0.0.0.0/0 [120/2] via 192.168.100.1, 00:00:24
S>* 0.0.0.0/0 [1/0] via 192.168.100.1, eth0
R>* 49.0.0.0/8 [120/2] via 192.168.100.1, eth0, 00:00:24
R>* 123.0.0.0/8 [120/2] via 192.168.100.1, eth0, 00:00:24
C>* 127.0.0.0/8 is directly connected, lo
C>* 192.168.100.0/24 is directly connected, eth0
C>* 192.168.101.0/24 is directly connected, eth1
R>* 220.210.194.0/24 [120/2] via 192.168.100.1, eth0, 00:00:24
R>* 220.210.221.0/24 [120/2] via 192.168.100.1, eth0, 00:00:24
R>* ***.***.***.0/24 [120/2] via 192.168.100.1, eth0, 00:00:24
R>* ***.***.***.0/24 [120/2] via 192.168.100.1, eth0, 00:00:24

※使用しているISPバレてしまうので一部マスクしてます。

RIPでデフォルトゲートウェイを含めたルーティング情報を取得できましたが、
アドミニストレーティブディスタンスの値がスタティックよりも高いので、
実際使われているのは、スタティックのルートを使われています。
(*がついているのが、実際に使われているルート)


なので、スタティックルーティングの設定を削除します。

setの代わりにdeleteを入れれば消えるそうなので

# delete protocols static route 0.0.0.0/0 next-hop 192.168.100.1
# commit
[ protocols static route 0.0.0.0/0 ]
Must add either a next-hop or blackhole for route 0.0.0.0/0

[[protocols static]] failed
Commit failed

あれ?。

# delete protocols static route 0.0.0.0/0
# commit

こちらの方はうまくいきました。
どうやら、deleteは必要最低限の記述でじゃないと、ダメそうです。

# show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
       I - ISIS, B - BGP, > - selected route, * - FIB route

R>* 0.0.0.0/0 [120/2] via 192.168.100.1, eth0, 00:00:56
R>* 49.0.0.0/8 [120/2] via 192.168.100.1, eth0, 00:00:56
R>* 123.0.0.0/8 [120/2] via 192.168.100.1, eth0, 00:00:56
C>* 127.0.0.0/8 is directly connected, lo
C>* 192.168.100.0/24 is directly connected, eth0
C>* 192.168.101.0/24 is directly connected, eth1
R>* 220.210.194.0/24 [120/2] via 192.168.100.1, eth0, 00:00:56
R>* 220.210.221.0/24 [120/2] via 192.168.100.1, eth0, 00:00:56
R>* ***.***.***.0/24 [120/2] via 192.168.100.1, eth0, 00:00:56
R>* ***.***.***.0/24 [120/2] via 192.168.100.1, eth0, 00:00:56

スタティックルーティングが消え、RIPのルーティングを使用しています。

いろいろつなぐ

自宅にYAMAHA、NEC、CISCO製のルータが
手持ちになりましたので、マルチベンダー環境でもルーティング情報を交換できているか確認します。
f:id:toranoana-lab:20181126155309p:plain
(メーカーバラバラなのでインターフェイス名もバラバラ。。。)

VyOS

# show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
       I - ISIS, B - BGP, > - selected route, * - FIB route

R>* 0.0.0.0/0 [120/2] via 192.168.100.1, eth0, 21:27:28
R>* 49.0.0.0/8 [120/2] via 192.168.100.1, eth0, 21:27:28
R>* 123.0.0.0/8 [120/2] via 192.168.100.1, eth0, 21:27:28
C>* 127.0.0.0/8 is directly connected, lo
C>* 192.168.100.0/24 is directly connected, eth0
C>* 192.168.101.0/24 is directly connected, eth1
R>* 192.168.201.0/24 [120/2] via 192.168.101.201, eth1, 00:00:15
R>* 192.168.202.0/24 [120/2] via 192.168.101.202, eth1, 00:01:20
R>* 220.210.194.0/24 [120/2] via 192.168.100.1, eth0, 21:27:28
R>* 220.210.221.0/24 [120/2] via 192.168.100.1, eth0, 21:27:28
R>* ***.***.***.0/24 [120/2] via 192.168.100.1, eth0, 21:27:28
R>* ***.***.***.0/24 [120/2] via 192.168.100.1, eth0, 21:27:28

CISCO 1812J
f:id:toranoana-lab:20181126165715j:plain

# show ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, + - replicated route

Gateway of last resort is 192.168.101.1 to network 0.0.0.0

R*    0.0.0.0/0 [120/2] via 192.168.101.1, 00:00:03, FastEthernet0
R     49.0.0.0/8 [120/2] via 192.168.101.1, 00:00:03, FastEthernet0
R     123.0.0.0/8 [120/2] via 192.168.101.1, 00:00:03, FastEthernet0
R     192.168.100.0/24 [120/1] via 192.168.101.1, 00:00:03, FastEthernet0
      192.168.101.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.101.0/24 is directly connected, FastEthernet0
L        192.168.101.201/32 is directly connected, FastEthernet0
      192.168.201.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.201.0/24 is directly connected, FastEthernet1
L        192.168.201.1/32 is directly connected, FastEthernet1
R     192.168.202.0/24 [120/1] via 192.168.101.202, 00:00:02, FastEthernet0
R     220.210.194.0/24 [120/2] via 192.168.101.1, 00:00:08, FastEthernet0
R     220.210.221.0/24 [120/2] via 192.168.101.1, 00:00:08, FastEthernet0
R     ***.***.***.0/24 [120/2] via 192.168.101.1, 00:00:05, FastEthernet0
R     ***.***.***.0/24 [120/2] via 192.168.101.1, 00:00:05, FastEthernet0

NEC IX2015
f:id:toranoana-lab:20181126165650j:plain

# show ip route
IP Routing Table - 10 entries, 2038 frees
Codes: C - Connected, S - Static, R - RIP, O - OSPF, IA - OSPF inter area
       E1 - OSPF external type 1, E2 - OSPF external type 2, B - BGP
       * - Candidate default, s - Summary
Timers: Age
R*   0.0.0.0/0 [120/3] via 192.168.101.1, FastEthernet0/0.0, 0:00:23
R    49.0.0.0/8 [120/3] via 192.168.101.1, FastEthernet0/0.0, 0:00:23
R    123.0.0.0/8 [120/3] via 192.168.101.1, FastEthernet0/0.0, 0:00:23
R    192.168.100.0/24 [120/2] via 192.168.101.1, FastEthernet0/0.0, 0:00:23
C    192.168.101.0/24 [0/1] is directly connected, FastEthernet0/0.0, 0:26:11
C    192.168.202.0/24 [0/1] is directly connected, FastEthernet0/1.0, 0:08:02
R    220.210.194.0/24 [120/3] via 192.168.101.1, FastEthernet0/0.0, 0:00:24
R    220.210.221.0/24 [120/3] via 192.168.101.1, FastEthernet0/0.0, 0:00:24
R    ***.***.***.0/24 [120/3] via 192.168.101.1, FastEthernet0/0.0, 0:00:24
R    ***.***.***.0/24 [120/3] via 192.168.101.1, FastEthernet0/0.0, 0:00:24

YAMAHA NVR500
※瘴気が濃いところにあったので、写真はなしです。。。。

show ip route
宛先ネットワーク    ゲートウェイ     インタフェース  種別  付加情報
default             -                    PP[01]    static  filter:500000
default             -                    PP[02]    static  filter:500000
default             -                    PP[01]    static  
49.***.***.***/32    -                    PP[01] temporary  
123.***.***.***/24    -                    PP[02]    static  
123.***.***.***/32    -                    PP[02] temporary  
123.***.***.***/32    -                    PP[02] temporary  
192.168.100.0/24    192.168.100.1          LAN1  implicit  
192.168.101.0/24    192.168.100.201        LAN1       RIP  metric=1 
192.168.201.0/24    192.168.100.201        LAN1       RIP  metric=2 
192.168.202.0/24    192.168.100.201        LAN1       RIP  metric=2 
220.210.194.***/25    -                    PP[02]    static  
220.210.221.***/32    -                    PP[02] temporary  
***.***.***.***/32    -                    PP[01] temporary  
***.***.***.***/32    -                    PP[01] temporary  
#


全機器、問題なく全ルーティング情報を交換できていました。

※NVR500のルーティング情報が多いのはRIPv1を使っているため、自動集約されているからです。

まとめ

ハードウェアの値段にもよりますが、同等の機能を持ったアプライアンス機器よりも安い
(今回は大体1万円ぐらい)
コマンドの使い勝手は、CISCO IOSに近いものが多く、使い慣れている方は学習コストは少ない
(と思います)

今回は、業務用として使うような(?)設定しかしていませんが、
NAPTやファイアウォールなどのブロードバンドルーターとしても設定できますので
余っているPCをルータにしてみたり、ネットワークの勉強としてや、
VPNを作って遊んでみたりしては、いかがでしょうか。

P.S.
NEC IX2015を設定するコマンドを探すのに一番時間がかかりました。


12/20(木) に『とらのあな開発室』の採用説明会を秋葉原で開催します! Webエンジニアがメインの説明会となりますが、デザイナー、ディレクターもあわせて募集していますので、ぜひ気軽にご参加下さい!
yumenosora.connpass.com


虎の穴ではJavascriptエンジニアをはじめとして一緒に働く仲間を絶賛募集中です!
この記事を読んで、興味を持っていただけた方はぜひ弊社の採用情報をご覧下さい。
www.toranoana.jp