自宅Lab

VultrでBGPフルルートを取得し自宅ネットワークに接続する方法

自宅にフルルートがほしい!と思ったので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とかをやりたい...

コメント

タイトルとURLをコピーしました