DOCKER: FRR BGP (1)

frroutingを使ってBGPを構成する。今回はOracle Cloudに作ったインスタンスとRaspberry Pi4, C841M(Cisco)の構成し、それぞれにfrrouting(docker)を導入してBGP接続を行う。Oracle CloudとRaspberry Pi4間はWireGuardによるVPN接続を行う。まずはOracle Cloud側から設定を行う。

Oracle Cloudはubuntuを使う。必要そうなパッケージのインストールを行う。

$ sudo apt install firewalld
$ sudo apt install docker-ce
$ sudo apt install docker-compose
$ sudo apt install iputils-ping net-tools
$ sudo apt install wireguard

次にdockerの設定を行う。firewalldで直接設定してしまうのでdockerのiptables設定機能は無効にしておく。

$ cat /etc/docker/daemon.json
{
  "iptables": false,
  "log-level": "warn",
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "5"
  }
}

NATを含めたfirewalldの設定を行う必要がある。使ってる設定から抜粋と一部変更したものが次。Oracle Cloud側でPacket Filterを設定しているので甘めの設定でも良い気がする。

#### CMD Alias
wan_if="ens3"
add_chain="firewall-cmd --permanent --direct --add-chain "
add_rule="firewall-cmd --permanent --direct --add-rule "
add_rule_v4F="firewall-cmd --permanent --direct --add-rule ipv4 filter "

#### MASQUERADE NAT
${add_chain} ipv4 nat SRC_NAPT
${add_rule}  ipv4 nat SRC_NAPT 10 -o ${wan_if} -s 10.8.0.0/16    -j MASQUERADE
${add_rule}  ipv4 nat SRC_NAPT 20 -o ${wan_if} -s 172.16.0.0/12  -j MASQUERADE
${add_rule}  ipv4 nat SRC_NAPT 30 -o ${wan_if} -s 192.168.0.0/16 -j MASQUERADE
${add_rule}  ipv4 nat POSTROUTING 100 -o ${wan_if} -j SRC_NAPT

#### Forwarding
${add_rule_v4F} FORWARD 999 -j ACCEPT

#### Service/Network Permitation
## WireGuard Seg(VPN Seg: BGP, BFD, ping)
${add_rule_v4F} INPUT 300 -s 172.27.5.0/24    -j ACCEPT

## WireGuard
${add_rule_v4F} INPUT 500 -p udp --dport 51820 -j ACCEPT

#### Reload Firewalld
firewall-cmd --reload

wireguardを起動してclient側からping等を行い、接続されることを確認する。

# wg
interface: wg0
  public key: 
  private key: (hidden)
  listening port: 51820

peer: Raspberry4
  endpoint: 
  allowed ips: 172.27.5.9/32, 192.168.32.0/20
  latest handshake: 27 seconds ago
  transfer: 34.89 MiB received, 35.40 MiB sent

peer: Raspberry4
  endpoint: 
  allowed ips: 172.27.5.7/32, 192.168.16.0/20
  latest handshake: 1 minute, 21 seconds ago
  transfer: 35.67 MiB received, 42.52 MiB sent

peer: VPS
  endpoint: 
  allowed ips: 172.27.5.1/32
  latest handshake: 1 minute, 59 seconds ago
  transfer: 35.46 MiB received, 35.46 MiB sent