1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Netbird(その1:L2ネットワーク提供)

1
Posted at

Netbirdで同一ネットワークセグメント実現

「Netbirdとは」と検索、下記回答が適切と感じられた。

NetBirdは、モダンなVPNプロトコルであるWireGuardをベースに、P2P(Peer-to-Peer)のメッシュネットワークを自動構築するオーバーレイネットワーク・ソリューションです。 ポート開放が不要: ICE/STUN/TURNといったNAT越え技術により、二重ルーター環境でも設定なしで繋がります。

ここでは、NetbirdをインストールしたNAT内側の機器どうしをメッシュネットワークとして接続し、それら機器のLAN側に同一ネットワークを実現する(L2提供)。

参考URL

環境

Topology.png

なお、”Netbird Cloud”は、本記事で使う名称。

  • 3拠点をNetbirdでメッシュネットワーク化
    • 各サイトにはNetbirdをインストールした機器(上図では四角の図形)とそれに接続されたPCとが存在
    • いずれのサイトもNAT配下
    • Netbird機器のOSはLinux
    • PCはLinux上のNetwork Namespaceに配置
    • 100.120.x.y/16はNetbird Cloudから配布されるIPアドレス
    • 各サイトのPCどうしが同じネットワーク(L2; 192.168.10.x/24)に所属
      • Wireguard上にVXLANを構築
      • VXLAN I/FとNetwork NamespaceのI/Fとをブリッジ化

Netbirdインストール

本家サイトの記載のとおりに進める。

$ curl -fsSL https://pkgs.netbird.io/install.sh | sh

...

NetBird service has been started
Installation has been finished. To connect, you need to run NetBird by executing the following command:

netbird up
$ netbird up
Please do the SSO login in your browser. 
If your browser didn't open automatically, use this URL to log in:

https://login.netbird.io/authorize?audience=https ....

通常、ここでブラウザが起動する。

1stLogin_1.png

IDとパスワードを入力(または、新規作成やSSO)すると

1stLogin_2.png

ログインが成功し、ターミナルには下記が表示される。

Connected

Netbird Cloudから割り当てられるIPアドレスは下記となる。

$ netbird status | grep IP
Netbird IP: 100.120.177.89/16

なお、アカウントごとに、100.120.x.y/16のネットワークが割り当てられるようだ。

設定

Network Namespace、VXLAN、ブリッジの設定を行うスクリプトである。ある1つの機器の記載であるが、他の2つの機器では、IPアドレスが異なるのみ。sudoにて実行。コメントを参考されたし。

# Network Namespace作成
ip netns add ns0

# I/Fペアの作成およびNamespaceへの配置
ip link add veth0 type veth peer name ns0-veth0
ip link set ns0-veth0 netns ns0

# Namespace側設定
ip netns exec ns0 ip link set lo up
ip netns exec ns0 ip link set ns0-veth0 up
ip netns exec ns0 ip addr add 192.168.10.1/24 dev ns0-veth0

# VXLAN作成(VLAN10)
ip link add vxlan10 type vxlan id 10 dev wt0 dstport 4789
ip link set vxlan10 up
# wt0: Wireguard I/F
# Remote,Localの指定不要(後述)

# Bridge作成
ip link add br0 type bridge
ip link set br0 up

# 末端LANをブリッジへ追加
ip link set veth0 master br0
ip link set veth0 up

# VXLANをブリッジへ追加
ip link set vxlan10 master br0

# Unknown MACアドレスデータを対向Netbird機器(IPアドレス指定)へ送信
bridge fdb append 00:00:00:00:00:00 dev vxlan10 dst 100.120.179.162
bridge fdb append 00:00:00:00:00:00 dev vxlan10 dst 100.120.177.89

下記がポイント

  • VXLANをWireguard上に作成
  • VXLAN上にL2フレームを流す
  • VXLANをブリッジ化

なお、ここではMTUの設定はしていない。

検証

あるNetbird機器上のNamespaceからpingするのみ。

$ sudo ip netns exec ns0 ping 192.168.10.2 -c 2
PING 192.168.10.2 (192.168.10.2) 56(84) bytes of data.
64 bytes from 192.168.10.2: icmp_seq=1 ttl=64 time=48.4 ms
64 bytes from 192.168.10.2: icmp_seq=2 ttl=64 time=67.1 ms

Netbirdステータス

”netbird status --detail”により、アカウントに紐づいた機器の情報が確認できる。

$ netbird status --detail
Peers detail:

...

 zagreb.netbird.cloud:
  NetBird IP: 100.120.177.89
  Public key: 30PzbJz++ItNFsgNbwRA74SxNqn+OiIk9bCkIT09UEk=
  Status: Connected
  -- detail --
  Connection type: P2P
  ICE candidate (Local/Remote): srflx/prflx
  ICE candidate endpoints (Local/Remote): 223.xxx.yyy.87:37145/192.168.10.112:51820
  Relay server address: rels://streamline-vl-nrt-1.relay.netbird.io:443
  Last connection update: 1 minute, 55 seconds ago
  Last WireGuard handshake: 1 minute, 56 seconds ago
  Transfer status (received/sent) 1.6 KiB/484 B
  Quantum resistance: false
  Networks: -
  Latency: 6.682857ms

 arlanda.netbird.cloud:
  NetBird IP: 100.120.179.162
  Public key: /UagahN10WpWdxXUhYWS5k2KSgvs4487+NDiqZcQl1w=
  Status: Connected
  -- detail --
  Connection type: Relayed
  ICE candidate (Local/Remote): -/-
  ICE candidate endpoints (Local/Remote): -/-
  Relay server address: rels://streamline-vl-nrt-1.relay.netbird.io:443
  Last connection update: 9 minutes, 6 seconds ago
  Last WireGuard handshake: 1 minute, 46 seconds ago
  Transfer status (received/sent) 4.2 KiB/2.7 KiB
  Quantum resistance: false
  Networks: 172.16.2.0/24
  Latency: 0s

Events:
  [INFO] SYSTEM (7e765ca5-762a-42ce-931d-97a24dc94ca7)
    Message: Network map updated
    Time: 1 hour, 4 minutes ago
OS: linux/amd64
Daemon version: 0.65.0
CLI version: 0.65.0
Profile: default
Management: Connected to https://api.netbird.io:443
Signal: Connected to https://signal.netbird.io:443
Relays: 
  [stun:stun.netbird.io:443] is Available
  [stun:stun.netbird.io:5555] is Available
  [turns:turn.netbird.io:443?transport=tcp] is Available
  [rels://streamline-vl-nrt-1.relay.netbird.io:443] is Available
Nameservers: 
FQDN: aspero.netbird.cloud
NetBird IP: 100.120.227.241/16
Interface type: Kernel
Quantum resistance: false
Lazy connection: false
SSH Server: Disabled
Networks: 172.16.1.0/24
Peers count: 3/4 Connected

対向機との接続方式(P2Pかリレーか)も見える。

  Connection type: P2P
  Connection type: Relayed

なお、
 https://app.netbird.io
にアクセスしてログインしても、アカウントに紐づいた機器の情報などが確認できる。

Peer2のコピー.PNG

ネットワークI/F状況

$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 xdpgeneric qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    prog/xdp id 54 
2: enp3s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether ac:87:a3:ZZ:YY:b8 brd ff:ff:ff:ff:ff:ff
3: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DORMANT group default qlen 1000
    link/ether 6c:40:08:YY:c4:TT brd ff:ff:ff:ff:ff:ff
4: wt0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1280 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/none 
6: veth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UP mode DEFAULT group default qlen 1000
    link/ether 92:bd:6f:e5:2e:d0 brd ff:ff:ff:ff:ff:ff link-netns ns0
7: vxlan10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1230 qdisc noqueue master br0 state UNKNOWN mode DEFAULT group default qlen 1000
    link/ether ea:93:48:48:3f:5b brd ff:ff:ff:ff:ff:ff
8: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1230 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 82:db:44:7e:c9:9e brd ff:ff:ff:ff:ff:ff

Wireguard I/F(wt0)のMTUが1280、VXLAN(vxlan10)のMTUが1230。

IPアドレス

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 xdpgeneric/id:54 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: enp3s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether ac:87:a3:PP:QQ:b8 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.2/24 brd 192.168.2.255 scope global dynamic noprefixroute enp3s0f0
       valid_lft 3437sec preferred_lft 3437sec
3: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 6c:40:08:KK:c4:LL brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.108/24 brd 192.168.10.255 scope global dynamic noprefixroute wlp2s0
       valid_lft 82458sec preferred_lft 82458sec
    inet6 2XX8:2XX1:7ee:9400:1024:UUUU:DSSS:a3ef/64 scope global temporary dynamic 
       valid_lft 276sec preferred_lft 276sec
    inet6 2XX8:2XX1:7ee:9400:e252:UXUI:8HH9:2646/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 276sec preferred_lft 276sec
    inet6 fe80::17df:b463:71e:YTHY/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
4: wt0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1280 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none 
    inet 100.120.227.241/16 brd 100.120.255.255 scope global wt0
       valid_lft forever preferred_lft forever
6: veth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UP group default qlen 1000
    link/ether 92:bd:6f:e5:2e:d0 brd ff:ff:ff:ff:ff:ff link-netns ns0
    inet6 fe80::90bd:6fff:KKKK:2PP0/64 scope link 
       valid_lft forever preferred_lft forever
7: vxlan10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1230 qdisc noqueue master br0 state UNKNOWN group default qlen 1000
    link/ether ea:93:48:48:3f:5b brd ff:ff:ff:ff:ff:ff
8: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1230 qdisc noqueue state UP group default qlen 1000
    link/ether 82:db:44:7e:c9:9e brd ff:ff:ff:ff:ff:ff

Wireguard設定ファイル

下記ファイルが存在。

$ sudo ls /var/lib/netbird
active_profile.json  default.json  state.json  HIMITU

Wireguard I/F名やMTUが見える。

$ sudo cat /var/lib/netbird/default.json | jq '.WgIface'
"wt0"
$ sudo cat /var/lib/netbird/default.json | jq '.MTU'
1280

ついでに(末端L3の疎通設定)

こちらの方が通常の利用方法であろう。外出先から自宅サーバーへのアクセスなどでの利用が挙げられる。GUIのみで設定可能。
 https://app.netbird.io/
にアクセスし、Peerリストを表示する。

Peer2のコピー.PNG

該当機器を選択し、Network Routesにて、”Add Route”をクリック。

NetworkRoute1.PNG

ルーティングする自機のネットワークを入力。

CreateNewRoute1のコピー.PNG

対象とする対向機(ここでは全て)を選択。

CreateNewRoute2のコピー.PNG

名称入力。

CreateNewRoute3のコピー.PNG

あとはそのまま続ける。

CreateNewRoute4.PNG

追加完了。

CreateNewRoute5.PNG

追加されたルーティング情報は、Network Routesで確認できる。

AddedRouteList.png

なお、Wireguardやルーティングへ必要な情報を自動的に追加してくれるようだ。検証は自明のため、省略。

EOF

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?