VyOSを用いたBGP接続(後編)

VyOSを用いたBGP接続(前編)で、VyOSのインストール、及び物理的な結線を終えましたので、後編ではVyOSのコンフィギュレーションを進めることにします。

1. ネットワーク構成(論理)

1-1. 論理構成図

f:id:komo-jp:20180701102002p:plain

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アドレスの調達になります。