自宅にフルルートがほしい!と思ったのでVultrからもらってきた話.
別にトランジットが欲しいわけではないが、自宅でルーターにフルートをぶち込んだり、RPKIの検証などを行うために、新鮮なフルート環境がほしい。そこで、Vultrというサービスを使って,BGPでフルルートをもらう。
自宅環境
Vultrでフルートをもらう場合,VultrのVPSと自宅環境をBGPで接続する必要がある.
まず、自宅環境について説明します。自宅のサーバーは現在マンションのインターネット環境を利用しているため、グローバルIPがありません。ただ,ブログ用のXserverのVPSを契約しているのでXServer VPSを経由して、自宅にフルルートを持ってくるようにします。

具体的には、Vultrからフルルートをもらい、そのフルルートをXserver経由で自宅サーバーにWireGuard経由で接続するという流れです。WireGuardについては別の記事で説明しているので、そちらを参照してください。
フルルート受信手順
Vultrで契約
Vultrは,クラウドサービスプロバイダーの一つです.
まず,Vultrのホームページに飛んで,アカウントを作っておきましょう.
Productsのタブから,以下のようなComputeを契約する画面に飛びます.
フルルートを受け取るだけなので,最小スペックの1CPU,1RAMで設定します.Locationは適当にOsakaにでもしておきます.

続いて,OSの選択.FRRoutingを乗っけるので,とりあえずUbuntuにしておきます.
また,右側にあるBackupはいらないのでDisabledにしておきます.あとは,ホスト名などを適当につけます.

お金を入れておけば,これでVPSが作成されて,以下のように出てきます.

BGP 設定
VPSが作れたら,BGPのフルルートをもらうためにサポートにリクエストします.NetworkのBGPタブから,「Get Started」を押します.

すると,BGPのリクエストを飛ばせる画面に行くので,Full Tableを選択し,Descriptionを適当に書いてリクエストします.

翌日ぐらいに,リクエストが受け入れられた連絡が来るので,それまで待ちます.
受け入れられると,ComputeのBGPタブに,以下のような接続情報が出てきます.
また,Instanceの再起動も求められます.

Vultr Instanceの設定
GREの設定
GREの設定を入れておきます.
sudo ufw disable
sudo ip tunnel add gre1 mode gre remote <XServer VPS
addr> local <自分のglobal> ttl 64
sudo ip addr add 172.16.201.1/24 dev gre1
sudo ip link set gre1 up
ufwはdisableにしていますが,vultr側のFWで適時制限はかけておきましょう.
FRRの設定
VultrのUbuntuにFRRoutingをインストールしていきます.特にバージョン指定とかなければ以下でインストール.
sudo apt update
sudo apt install -y frr
/etc/frr/daemonsは,BGPdが動作するように修正.
bgpd=yes
vtyshで設定CLIへ.最終的に以下になるように設定を入れました.
no ip forwarding
no ipv6 forwarding
!
interface lo
ip address 192.168.255.251/32
exit
!
router bgp {{ インスタンスのAS }}
bgp router-id 192.168.255.251
bgp default ipv4-flowspec
neighbor INTERNAL peer-group
neighbor INTERNAL remote-as 65100
neighbor INTERNAL ebgp-multihop 24
neighbor INTERNAL update-source gre1
neighbor VULTR-PEER peer-group
neighbor VULTR-PEER remote-as {{ Vultr BGPのAS }}
neighbor VULTR-PEER password {{ Vultr BGPのパスワード }}
neighbor VULTR-PEER ebgp-multihop 2
neighbor VULTR-PEER update-source {{ Vultrインスタンスのグローバルアドレス }}
neighbor 172.16.201.2 peer-group INTERNAL
neighbor {{ Vultr BGPのアドレス }} peer-group VULTR-PEER
!
address-family ipv4 unicast
neighbor INTERNAL soft-reconfiguration inbound
neighbor INTERNAL route-map ALL-PREFIX-PERMIT out
neighbor VULTR-PEER soft-reconfiguration inbound
neighbor VULTR-PEER route-map BOGON-PREFIX-MAP in
neighbor VULTR-PEER route-map ALL-PREFIX-DENY out
exit-address-family
!
ip prefix-list ALL-PREFIX seq 5 permit 0.0.0.0/0 le 32
ip prefix-list BOGON-FILTER seq 5 deny 10.0.0.0/8 le 32
ip prefix-list BOGON-FILTER seq 10 deny 172.16.0.0/12 le 32
ip prefix-list BOGON-FILTER seq 15 deny 192.168.0.0/16 le 32
ip prefix-list BOGON-FILTER seq 20 deny 0.0.0.0/8 le 32
ip prefix-list BOGON-FILTER seq 25 deny 127.0.0.0/8 le 32
ip prefix-list BOGON-FILTER seq 30 deny 169.254.0.0/16 le 32
ip prefix-list BOGON-FILTER seq 35 deny 192.0.2.0/24 le 32
ip prefix-list BOGON-FILTER seq 40 deny 198.18.0.0/15 le 32
ip prefix-list BOGON-FILTER seq 45 deny 198.51.100.0/24 le 32
ip prefix-list BOGON-FILTER seq 50 deny 203.0.113.0/24 le 32
ip prefix-list BOGON-FILTER seq 55 deny 224.0.0.0/4 le 32
ip prefix-list BOGON-FILTER seq 60 deny 240.0.0.0/4 le 32
ip prefix-list BOGON-FILTER seq 65 deny 255.255.255.255/32
ip prefix-list BOGON-FILTER seq 70 permit 0.0.0.0/0 le 32
!
route-map BOGON-PREFIX-MAP permit 10
match ip address prefix-list BOGON-FILTER
exit
!
route-map ALL-PREFIX-DENY deny 10
match ip address prefix-list ALL-PREFIX
exit
!
route-map ALL-PREFIX-PERMIT permit 10
match ip address prefix-list ALL-PREFIX
exit
!
ip protocol bgp route-map ALL-PREFIX-DENY
特に普通のBGP設定ですが,特別な設定として,少しでも負荷を下げるために以下の設定を入れています.この設定はZebraからFIB (Linux Kernel) へインストールするルートをフィルタリングするものです.Kernelに載せないことでメモリ量を削減します.これを入れないと最低スペックだとVMが落ちることがよくあります…
ip protocol bgp route-map ALL-PREFIX-DENY
XServer VPSの設定
GREの設定
Vultrと同様にGRE設定
sudo ip tunnel add gre1 mode gre remote <Vultr Instance addr> local <自グローバル> ttl 64
sudo ip addr add 172.16.201.2/24 dev gre1
sudo ip link set gre1 up
FRRoutingの設定
Vultrと一緒です.書いてませんが,自宅に引き込むなら自宅とのPeer設定も必要です.
router bgp 65100
bgp router-id 192.168.255.5
neighbor VULTR-VM-PEER peer-group
neighbor VULTR-VM-PEER remote-as {{ VultrインスタンスのAS }}
neighbor VULTR-VM-PEER ebgp-multihop 24
neighbor VULTR-VM-PEER update-source 172.16.201.2
neighbor 172.16.201.1 peer-group VULTR-VM-PEER
!
address-family ipv4 unicast
neighbor VULTR-VM-PEER soft-reconfiguration inbound
neighbor VULTR-VM-PEER route-map BOGON-PREFIX-MAP in
neighbor VULTR-VM-PEER route-map ALL-PREFIX-DENY out
exit-address-family
exit
!
ip prefix-list ALL-PREFIX seq 5 permit 0.0.0.0/0 le 32
ip prefix-list BOGON-FILTER seq 5 deny 10.0.0.0/8 le 32
ip prefix-list BOGON-FILTER seq 10 deny 172.16.0.0/12 le 32
ip prefix-list BOGON-FILTER seq 15 deny 192.168.0.0/16 le 32
ip prefix-list BOGON-FILTER seq 20 deny 0.0.0.0/8 le 32
ip prefix-list BOGON-FILTER seq 25 deny 127.0.0.0/8 le 32
ip prefix-list BOGON-FILTER seq 30 deny 169.254.0.0/16 le 32
ip prefix-list BOGON-FILTER seq 35 deny 192.0.2.0/24 le 32
ip prefix-list BOGON-FILTER seq 40 deny 198.18.0.0/15 le 32
ip prefix-list BOGON-FILTER seq 45 deny 198.51.100.0/24 le 32
ip prefix-list BOGON-FILTER seq 50 deny 203.0.113.0/24 le 32
ip prefix-list BOGON-FILTER seq 55 deny 224.0.0.0/4 le 32
ip prefix-list BOGON-FILTER seq 60 deny 240.0.0.0/4 le 32
ip prefix-list BOGON-FILTER seq 65 deny 255.255.255.255/32
ip prefix-list BOGON-FILTER seq 70 permit 0.0.0.0/0 le 32
!
route-map BOGON-PREFIX-MAP permit 10
match ip address prefix-list BOGON-FILTER
exit
!
route-map ALL-PREFIX-DENY deny 10
match ip address prefix-list ALL-PREFIX
exit
!
ip protocol bgp route-map ALL-PREFIX-DENY
Full Route確認
Vultr側でフルルートを受け取っているのかを確認します.
vvm01ur01# show ip bgp neighbors 172.16.201.2
<!----- 略 -----!>
For address family: IPv4 Unicast
VULTR-PEER peer-group member
Update group 1, subgroup 1
Packet Queue length 0
Inbound soft reconfiguration allowed
Community attribute sent to this neighbor(all)
Inbound path policy configured
Outbound path policy configured
Route map for incoming advertisements is *BOGON-PREFIX-MAP
Route map for outgoing advertisements is *ALL-PREFIX-DENY
969882 accepted prefixes
96万経路ぐらい使われているので大丈夫そう?
XServer側も受け取れていそう.
xvpsu24n01.frr# show bgp neighbors 172.16.201.1
<!----- 略 -----!>
For address family: IPv4 Unicast
VULTR-VM-PEER peer-group member
Update group 10, subgroup 7
Packet Queue length 0
Inbound soft reconfiguration allowed
Community attribute sent to this neighbor(all)
Inbound path policy configured
Outbound path policy configured
Route map for incoming advertisements is *BOGON-PREFIX-MAP
Route map for outgoing advertisements is *ALL-PREFIX-DENY
969564 accepted prefixes
ちなみに,Vultrのインスタンスのメモリ使用量はかつかつでSWAP領域がかなり使われている状態…
$ free -h
total used free shared buff/cache available
Mem: 951Mi 712Mi 68Mi 0.0Ki 170Mi 98Mi
Swap: 2.3Gi 1.8Gi 542Mi
おわりに
せっかくFull Route手に入れたのでRPKIとかをやりたい...
コメント