サマリー
新しいルータを買った時、新しいルータの代わりになる仮想マシンを試したい時、ISPの回線がもう少しあればいいのに。そう思うときがあります。
※この文脈で言う「ルータ」とは、PPPoEクライアントとNAPTを行う家庭用ブロードバンドルータの意味です。
それを視覚的に分かりやすく手元に置くことが出来たら、ふと試そうと思い立った時に使うことが出来てとても便利ですよね!(裏声)
僕もそう思います。
そこで、VirtualBoxを使った仮想マシン間のネットワークを作り、視覚分野をGNS3で補う形で、簡単なISP接続検証を行えるようにしたいと思います。
構成図
今回作成しようとしているトポロジは次のようになります。小規模構成ですね。
ISP接続と言っておきながら、本来ISPの設備管理と思われる部分については再現しないことにしました。
だったらL2TP区間も要らないじゃねぇかという意見は黙殺します。
BSDRPの入手と準備
BSDRPってのは、NanoBSDをベースにしたルータディストリビューション。
と言っても、Vyatta程完全なルータCLIを備えてるわけではないので、必要なパッケージが入ったFreeBSDにsshでログインしてあれこれするのを想像してもらうのが近いと思います。
xz形式を解凍すると、250MB程度のイメージファイルが出力されるので、これをVirtualBoxのVDI形式に変換してしまいます。
C:\\iso\\BSDRP-1.4-full-amd64-vga.img
にあると仮定すると、
1
2
3
|
C:\iso>"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" convertdd BSDRP-1.4-full-amd64-vga.img BSDRP-1.4-full-amd64-vga.vdi
Converting from raw image file="BSDRP-1.4-full-amd64-vga.img" to file="BSDRP-1.4-full-amd64-vga.vdi"...
Creating dynamic image with size 256000000 bytes (245MB)...
|
とすると、 BSDRP-1.4-full-amd64-vga.vdi が出来上がる。
VirtualBoxの設定
次に、仮想マシンを作成します。(ここでのパラメータはホストマシンの性能と照らして適宜決めれば良いです) ※VirtualBoxのインストールは飛ばすけどいいよね。
新規で新しく仮想マシンを作りましょう。
名前とオペレーティングシステム
メモリーサイズ
ハードドライブ(ここで、先程作ったBSDRP-1.4-full-amd64-vga.vdiを指定する)
NICの本数はGNS3側で設定できるかので、増やさないで放置。
BSDRPの仮想マシン用設定
BSDRPは仮想マシンとして動かすときは、"# system virtualized"しようね、と User Guide に書いてあるので、とりあえずその通りにする。
起動して # system virtualized
と入力して # reboot
として再起動。
初回起動時にSSHキーが生成され、それを保存されるか聞かれるので、yesと回答。
再起動後は、仮想マシンの電源を切る。
構成に必要なマシンの増殖
Vagrantの方が良いのかもしれないけど、全部で数台なので手作業でやっちゃうよ。
さっきのマシンを選択してクローン。名前はPPPoE Serverとか何でも。MACアドレスは一応つけ直します。
リンクしているクローンを作れば、容量も少なくて済む。
もう1台も同じようにクローンします。
これで、BBR、BAS_LAC、LNSの3台が作成されるわけだね。
Note
- BAS(Broadband Access Service) : PPPoE Serverのこと
- LAC(L2TP Access Concentrator) : L2TP Clientのこと
- LNS(L2TP Network Server) : L2TP Serverのこと
GNS3の設定(ノードの登録)
まず、GNS3にVirtualBoxの各ノードを登録します。
編集 → 設定でVirtualBoxの項目に移動して、「設定をテスト」する
VirtualBox ゲストの設定で、VM Listからさっき作ったVMを指定して保存していく。
ここで、 “Reserve first NIC for VirtualBox NAT to host OS” にチェックを入れておくと、GNS3で実施する配線前にe0(OSから見るとeth0とかem0とかそういう部分)は配線が予約される。
3台とも登録する。
GNS3の設定(トポロジ構成)
VirtualBox ゲストをドラッグして乗っけていく。
この時、未設置のVirtualBox ゲストを選択できるので順次置いていく。
とりあえず3台。
配線をする。
VirtualBox側で仮想マシンを作った時にはNICは1個しかなくても、GNS3側でNICの数を増やしていれば(今回の例ではとりあえず4つ)、GNS3側から起動する時は増やした設定になっている。
更に、e0は既にVirtualBoxのNAT IFに配線済みなので選択できない。
とりあえず横につなぐ。(名前だけなので、現時点で中身の設定は全て一緒なわけだが)
普通に起動する。
起動後。
各ノードの設定
とりあえず全ノードのコンソールを開く。
こうなる。
ログインはrootでOK。
設定は流しで。仮想自宅に遠いところから。
LNS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
[root@router]~# ifconfig em1 192.168.1.3/24
[root@router]~# vi /usr/local/etc/mpd5/mpd.conf
default:
set ippool add pool1 203.0.113.1 203.0.113.127
create bundle template B
set ipcp ranges 192.0.2.1/32 ippool pool1
set ipcp dns 8.8.8.8
create link template L l2tp
set l2tp enable length
set l2tp self 192.168.1.3
set link action bundle B
set link enable chap
set auth authname user1
set link enable incoming
[root@router]~# echo 'user1 pass1' >> /usr/local/etc/mpd5/mpd.secret
[root@router]~# echo 'mpd_enable="YES"' >> /etc/rc.conf
[root@router]~# echo 'mpd_flags="-b -s ppp"' >> /etc/rc.conf
[root@router]~# /usr/local/etc/rc.d/mpd5 start
|
BAS_LAC
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@router]~# ifconfig em2 192.168.1.2/24
[root@router]~# vi /usr/local/etc/mpd5/mpd.conf
default:
create link template L1 pppoe
set pppoe iface em1
set link action forward L2
set link enable incoming
create link template L2 l2tp
set l2tp peer 192.168.1.3
[root@router]~# echo 'mpd_enable="YES"' >> /etc/rc.conf
[root@router]~# echo 'mpd_flags="-b -s ppp"' >> /etc/rc.conf
[root@router]~# /usr/local/etc/rc.d/mpd5 start
|
BBR
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[root@router]~# vi /usr/local/etc/mpd5/mpd.conf
default:
create bundle static B1
set ipcp enable req-pri-dns
set ipcp enable req-sec-dns
set iface route default
create link static L1 pppoe
set link action bundle B1
set auth authname user1
set auth password pass1
set pppoe iface em1
open
[root@router]~# echo 'mpd_enable="YES"' >> /etc/rc.conf
[root@router]~# echo 'mpd_flags="-b -s ppp"' >> /etc/rc.conf
[root@router]~# /usr/local/etc/rc.d/mpd5 start
|
動作確認
LNS
LNSではちゃんと経路ができている。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
[root@router]~# netstat -rn -f inet
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
10.0.0.0/24 link#1 U 0 0 em0
10.0.0.2 link#1 UHS 0 0 lo0
127.0.0.1 link#5 UH 0 260 lo0
192.0.2.1 link#7 UHS 0 0 lo0
192.168.1.0/24 link#2 U 0 170 em1
192.168.1.3 link#2 UHS 0 0 lo0
203.0.113.1 link#7 UH 0 0 ng0
[root@router]~# ifconfig ng0
ng0: flags=88d1 metric 0 mtu 1492
inet 192.0.2.1 --> 203.0.113.1 netmask 0xffffffff
inet6 fe80::a00:27ff:fea4:5ad6%ng0 prefixlen 64 scopeid 0x7
nd6 options=21
|
BAS_LAC
中間に位置するBASではL3の変化はないし、新しい仮想IFも出来ないよ。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root@router]~# ifconfig grep UP
em0: flags=8843 metric 0 mtu 1500
em1: flags=8843 metric 0 mtu 1500
em2: flags=8843 metric 0 mtu 1500
lo0: flags=8049 metric 0 mtu 16384
[root@router]~# netstat -rn -f inet
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
10.0.0.0/24 link#1 U 0 0 em0
10.0.0.2 link#1 UHS 0 0 lo0
127.0.0.1 link#5 UH 0 211 lo0
192.168.1.0/24 link#3 U 0 137 em2
192.168.1.2 link#3 UHS 0 0 lo0
|
BBR
BBRにアドレスが割り当てられて、経路も追加されている。
(PPP接続した時にDNSのアドレスも降ってきているけど、それをホストに設定するには別途スクリプトが必要なので今回は割愛)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[root@router]~# ifconfig ng0
ng0: flags=88d1 metric 0 mtu 1492
inet 203.0.113.1 --> 192.0.2.1 netmask 0xffffffff
inet6 fe80::a00:27ff:fe44:b4da%ng0 prefixlen 64 scopeid 0x7
nd6 options=21
[root@router]~# netstat -rn -f inet
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 192.0.2.1 UGS 0 0 ng0
10.0.0.0/24 link#1 U 0 0 em0
10.0.0.2 link#1 UHS 0 0 lo0
127.0.0.1 link#5 UH 0 334 lo0
192.0.2.1 link#7 UH 0 0 ng0
203.0.113.1 link#7 UHS 0 0 lo0
|
おしまい
まぁ今日の話はBSDRPのページにある pppoe_and_l2tp_lab の焼き直しなんですけどね。
色々話が広がるのでベースパターンとしてこういう環境を作れると良いです。
BASの下に複数台のBBRをぶら下げようとするとどうすべきか、とか。
それにしても、無駄に画像をふんだんに使ってしまった…くどい…