VyOSを用いたBGP接続(前編)で、VyOSのインストール、及び物理的な結線を終えましたので、後編ではVyOSのコンフィギュレーションを進めることにします。
1. ネットワーク構成(論理)
1-1. 論理構成図
1-1-1. ユニークローカルIPv6ユニキャストアドレス(ULA)
IHANetのBGPネットワークに接続するには、独自にIPv6アドレスの割り当てを受けている必要があります。今回は検証環境ですので、IPv4でいうところのプライベートIPアドレスに相当する、ユニークローカルIPv6ユニキャストアドレスを利用することにします。下記JPNICのサイトに詳しい説明がありますが、fd00::/8で始まるユニークローカルIPv6ユニキャストアドレスは、「いつでも誰でも利用可能なアドレス」として用意されています。
サブネットプレフィックスのグローバル識別子を任意の値に決めて利用すれば良いと思われますが、NTPやMACアドレスなどの情報を基にランダムな値を得る方法も紹介されているようです。
今回の例では、Tunnel-Segment、Site-A-Segment、Site-B-Segmentのそれぞれのセグメント用に、適当に決めた3つのユニークローカルIPv6ユニキャストアドレスを用意しました。
インターネット10分講座:IPv6アドレス~技術解説~ - JPNIC
2. VyOSセットアップ
2-1. VyOS 基本設定
VyOSのログインユーザー名/Passwordは、共に"vyos"になります。
ログイン後、上図の論理構成図に記載のIPアドレスを、各インターフェースに設定します。その他、ホスト名/SSH/Timezoneの設定も行います。
一点、注意が必要なのは、eth0はデフォルトでDHCPによるアドレス取得を行うように設定されています。この為、eth0にIPアドレスを設定しcommitコマンドで反映すると、"Can't configure static IPv4 address and DHCP on the same interface."というエラーメッセージが表示されます。下記コマンド例の通り、deleteコマンドでDHCPによるアドレス取得設定を削除しておく必要があります。
configure
set system host-name VyOS-A
delete interfaces ethernet eth0 address dhcp
set interfaces ethernet eth0 address 172.16.0.1/16
set interfaces ethernet eth0 description Internet
set interfaces ethernet eth1 address fd5d:c9b2:2451:0::1/64
set interfaces ethernet eth1 description Site-A-Segment
set service ssh port 10022
set system time-zone Asia/Tokyo
commit
save
exit
2-2. GRE/IPIPトンネル確立
トンネリングプロトコルとしてIPIP(IP-in-IP)とGRE(Generic Routing Encapsulation)の二つがありますが、どちらを使うべきでしょうか。IPIPは、カプセル化できるプロトコルとしてIPしか対応していませんが、元のIPパケットを包む形で新規にIPヘッダーのみを付加するシンプルな構成です。対してGREは、4~16バイトのGREヘッダを追加することにより、他のレイヤ3プロトコルのカプセル化に対応していることや、オプションでチェックサムやTunnelキーの追加などの機能を備えているようです。
基本的にGREの付加機能は不要であり、シンプルでオーバーヘッドの少ない、IPIPが良いように思います。ただ、どうもVyOSではIPIPの設定がうまくいきませんでした。今回の要件はIPv6パケットをIPv4で包むIPv6 over IPv4となります。VyOSで用意されているIPIPのカプセル化タイプは以下の通りです。色々と試したのですが、うまく設定の反映、Tun0 I/Fに対する疎通確認ができませんでした。今回の要件はIPv6 over IPv4であり、VyOSがサポートしているIPIPタイプでは対応できないのかもしれません。結局、カプセル化タイプとしてGREを採用することにしました。
※2018/07/02:追記
IPv6 over IPv4のトンネリングプロトコルとしてSITというものがあり、このタイプはVyOSでサポートされている。
Eencapsulation Type |
説明 |
ipip |
IP in IP encapsulation |
ipip6 |
IP in IP6 encapsulation |
ip6ip6 |
IP6 in IP6 encapsulation |
set interfaces tunnel tun0 address fdce:3feb:5e29:0::1/64
set interfaces tunnel tun0 description Tunnel-Segment
set interfaces tunnel tun0 encapsulation gre
set interfaces tunnel tun0 local-ip 172.16.0.1
set interfaces tunnel tun0 remote-ip 172.16.0.2
2-3. BGP設定
AS番号は、上図論理構成図の通り、プライベートAS番号から採番しています。ピアのアドレスとして指定するアドレスは、ピアのtun0インターフェースに割り当てたIPv6アドレスになります。また広報するアドレスとして、自身のLAN側インターフェースであるeth1インターフェースに割り当てたIPv6アドレスセグメントを指定します。
set protocols bgp 65001 neighbor fdce:3feb:5e29::2 remote-as 65002
set protocols bgp 65001 neighbor fdce:3feb:5e29::2 address-family ipv6-unicast
set protocols bgp 65001 address-family ipv6-unicast network fd5d:c9b2:2451::/64
3. 動作確認
vyos@VyOS-A:~$ show interfaces
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface IP Address S/L Description
--------- ---------- --- -----------
eth0 172.16.0.1/16 u/u Internet
eth1 fd5d:c9b2:2451::1/64 u/u Site-A-Segment
lo 127.0.0.1/8 u/u
::1/128
tun0 fdce:3feb:5e29::1/64 u/u Tunnel-Segment
vyos@VyOS-A:~$
vyos@VyOS-A:~$ show ipv6 bgp summary
BGP router identifier 172.20.30.1, local AS number 65001
RIB entries 3, using 288 bytes of memory
Peers 1, using 4560 bytes of memory
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
fdce:3feb:5e29::2
4 65002 28 31 0 0 0 00:26:44 1
Total number of neighbors 1
vyos@VyOS-A:~$
vyos@VyOS-A:~$ 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>* 172.16.0.0/16 is directly connected, eth0
vyos@VyOS-A:~$
vyos@VyOS-A:~$ show ipv6 route
Codes: K - kernel route, C - connected, S - static, R - RIPng, O - OSPFv3,
I - ISIS, B - BGP, * - FIB route.
C>* ::1/128 is directly connected, lo
B>* fd58:cbd2:b752::/64 [20/0] via fe80::5efe:ac14:1e02, tun0, 00:04:46
C>* fd5d:c9b2:2451::/64 is directly connected, eth1
C>* fdce:3feb:5e29::/64 is directly connected, tun0
C * fe80::/64 is directly connected, eth1
C * fe80::/64 is directly connected, eth0
C>* fe80::/64 is directly connected, tun0
vyos@VyOS-A:~$
vyos@VyOS-A:~$ ping fdce:3feb:5e29::2 count 3
PING fdce:3feb:5e29::2(fdce:3feb:5e29::2) 56 data bytes
64 bytes from fdce:3feb:5e29::2: icmp_seq=1 ttl=64 time=0.240 ms
64 bytes from fdce:3feb:5e29::2: icmp_seq=2 ttl=64 time=0.354 ms
64 bytes from fdce:3feb:5e29::2: icmp_seq=3 ttl=64 time=0.432 ms
--- fdce:3feb:5e29::2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.240/0.342/0.432/0.078 ms
vyos@VyOS-A:~$
vyos@VyOS-A:~$ ping 172.16.0.2 count 3
PING 172.16.0.2 (172.16.0.2) 56(84) bytes of data.
64 bytes from 172.16.0.2: icmp_req=1 ttl=64 time=0.201 ms
64 bytes from 172.16.0.2: icmp_req=2 ttl=64 time=0.360 ms
64 bytes from 172.16.0.2: icmp_req=3 ttl=64 time=0.382 ms
--- 172.16.0.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.201/0.314/0.382/0.081 ms
vyos@VyOS-A:~$
vyos@VyOS-A:~$ ping fd58:cbd2:b752::1 interface eth1 count 3
PING fd58:cbd2:b752::1(fd58:cbd2:b752::1) from fdce:3feb:5e29::1 eth1: 56 data bytes
64 bytes from fd58:cbd2:b752::1: icmp_seq=1 ttl=64 time=0.264 ms
64 bytes from fd58:cbd2:b752::1: icmp_seq=2 ttl=64 time=0.263 ms
64 bytes from fd58:cbd2:b752::1: icmp_seq=3 ttl=64 time=0.301 ms
--- fd58:cbd2:b752::1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.263/0.276/0.301/0.017 ms
vyos@VyOS-A:~$
今回、初めてVyOSを利用しましたが、昔、JUNOSをそこそこ使い込んでいた経験が活きて、違和感なく利用することができました。
動作検証も想定通りに進み成功しました。次のステップは、さくらインターネットのVPS上でのVyOS稼働、及びIPv6アドレスの調達になります。