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. 動作確認
インターフェースのステータス確認
全てのインターフェースのステータスがUpとなっていることを確認。
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:~$
BGP セッションステータス
BGPピアが確立できていることを確認。IPv6でBGPピアを張る為、show ipv6 bgp summaryである事に注意。"State/PfxRcd"フィールドが、"1"となっている。
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:~$
ルーティングテーブルの確認
対向拠点のLAN側IPv6アドレスセグメントがルーティングテーブル上に乗っていることを確認。
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:~$
疎通確認
対向ピアのTun0/eth0/eth1の各アドレスに対して、Pingで疎通が取れることを確認。
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アドレスの調達になります。