0
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?

私的メモ: Vultrに/64で振られているIPv6を/64のまま延長する

Posted at

何がしたかったか

大前提

以前、こんな記事を書きました。

この時は Vultrから振り出される/64のアドレスブロックを/78で切り出して使用 していましたが、構成要件の変更やVPSの追加などがあり、 GUAをNAT66して背後ではULAで処理した方が楽になった ので一旦この構成はボツになりました。

駄菓子菓子

一応技術でメシ食うてる身の人間として、「このままではいけないのではないか」「実は ちゃんと/64で収容できるのではないか 」という謎の焦燥感がありましたので、色々悩んだ末に少し余裕が出来たり、改めて/64で収容できる環境の構築を一度はやっておく必要が出てきたので (※進まない仕事からの現実逃避とも言う) 、再チャレンジすることになりました。

ネットワーク(完成系)

非常に大雑把ですが、大体自宅ネットワークとVultrはこのように接続されています。
実際には LACP on VXLAN on WireGuard VPN が自宅ルーターとVultrの間に張られていますが、Plantumlで表現するのが困難だと感じたので図からは割愛しています。

Vultr側の実装

Netplan

Netplanで一括管理大好き人間 なので、基本的なネットワーク設定は全部Netplan頼みでやっています。
今回、WireGuard VPNは既に張られていましたので、そこにもう1つずつVXLANを重畳させてもらう形でGUAネットワーク空間用のVXLANを張らせてもらい、それをボンドインターフェイスにまとめて、openvswitchでよしなにLACPにしてもらいます(UFWの設定例は省略させていただきます)。

# 99-network-init.yaml
network:
  renderer: networkd
  version: 2
  bonds:
    bond4GUA:
      accept-ra: false
      dhcp4: false
      dhcp6: false
      interfaces:
      - native6e
      - native6o
      - native6r
      mtu: 1280
      openvswitch:
        lacp: active
      optional: true
      parameters:
        lacp-rate: fast
        mii-monitor-interval: 1s
        mode: balance-slb
        transmit-hash-policy: layer2+3
  bridges:
    nativebridge: # GUA用ブリッジインターフェイス
      accept-ra: false
      addresses: 
      - '(Vultrインスタンスに振られたプレフィックス)::1/64'
      dhcp4: false
      dhcp6: false
      interfaces:
      - bond4GUA
      mtu: 1280
      ipv6-mtu: 1280
      optional: true
      routes:
      - to: '(Vultrインスタンスに振られたプレフィックス)::/64'
        metric: 2
  ethernets:
    enp1s0:
      accept-ra: true
      addresses:
      - '(Vultrインスタンスに振られたプレフィックスから切り出したアドレス)/64'
      dhcp4: true
      dhcp6: true
      match:
        macaddress: (VultrインスタンスのMACアドレス)
      set-name: enp1s0

WireGuardとVXLANの設定については特に真新しい内容はありませんので割愛させていただきます (それを言うならボンドインターフェイスもだろ)

DHCP

DHCPはKea-DHCPで担います。"nativeBridge"がGUA空間用ブリッジインターフェイス名で、おおよそこんな具合。

/etc/kea/kea-dhcp6.conf
{
	"Dhcp6": {
		"valid-lifetime": 86400,
		"renew-timer": 3600,
		"rebind-timer": 7200,
		"preferred-lifetime": 54000,
		"decline-probation-period": 3600,
		"interfaces-config": {
			"interfaces": [
				"(ULA空間用ブリッジインターフェイス名)",
				"nativeBridge"
			]
        	},
        	//"lease-database": {
                	//"type": "memfile",
                	//"persist": true,
                	//"name": "/var/lib/kea/dhcp6.leases"
        	//},
        	"subnet6": [
                	{
                		"subnet": "(ULAアドレスブロック)::/64",
                		"pools": [
					{
                        			"pool": "(ULAアドレスブロック)ffff::1 - (ULAアドレスブロック):ffff:ffff:ffff:ffff"
                			}
				],
                		"id": 1,
				"interface": "(ULA空間用ブリッジインターフェイス名)",
				"option-data": [
					{
						"name": "dns-servers",
						"code": 23,
						"data": "(ULAアドレスブロック)::254"
					}
				]
                	},
			{
				"subnet": "(Vultrに振られたプレフィックス)::/64",
				"pools": [
					{
						"pool": "(Vultrに振られたプレフィックス)::2 - (Vultrに振られたプレフィックス):ffff:ffff:ffff:ffff"
					}
				],
				"id": 2,
				"interface": "nativeBridge",
				"option-data": [
					{
						"name": "dns-servers",
						"code": 23,
						"data": "2606:4700:4700::1111, 2606:4700:4700::1001"
					}
				]
			}
        	]
	}
}

RA(Router Advertize)

RA(Router Advertize)の広報はradvdにやってもらいます。弊環境ではおよそこんな感じ。

/etc/radvd.conf
interface (ULA空間用ブリッジインターフェイス名)
{
        AdvSendAdvert on;
        AdvManagedFlag on;
        prefix (ULAアドレスブロック)::/64
        {
                AdvAutonomous on;
                AdvOnLink on;
                AdvRouterAddr on;
        };
};

interface nativeBridge
{
	AdvSendAdvert on;
	prefix (Vultrに振られたプレフィックス)::/64
	{
		AdvAutonomous on;
		AdvOnLink on;
	};
};

ND Proxy

ND Proxyはndppdにやってもらいます。弊環境ではおよそこんな感じ。

/etc/ndppd.conf
proxy enp1s0 {
	router no
	autowire yes
	promiscuous no
	rule (Vultrに振られたプリフィックス)::/64 {
		iface nativeBridge
		autovia yes
	}
}

UFW

DHCPに必要なポートを開けておきます。例えばこんな感じ。

root@VultrFront:~$ ufw allow in on nativeBridge from ::/0 port 546:547 to any port 546:547 proto udp
root@VultrFront:~$ ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[57] 546:547/udp (v6) on nativeBridge ALLOW IN    546:547/udp (v6)  

その他

GUA空間用ブリッジ内にIPv4も通したい場合は適宜その設定を行なって、UFWなどでNATの設定も入れてください。
その他、通信で許可したいものだけを適宜UFWなどで許可してください。
本稿では割愛いたします。

設定の適用

ここまで設定が終わったら、設定を適用していきます。

root@VultrFront:~$ netplan try --timeout 20
nativeBond: reverting custom parameters for bridges and bonds is not supported
vxbond0: reverting custom parameters for bridges and bonds is not supported

Please carefully review the configuration and use 'netplan apply' directly.
root@VultrFront:~$ netplan apply
root@VultrFront:~$ systemctl restart radvd.service && systemctl enable radvd.service --now
root@VultrFront:~$ systemctl enable ndppd.service --now
root@VultrFront:~$ systemctl enable kea-dhcp6-server.service --now

対向側(自宅ルーター側)の設定

Netplan

深く考えずにUFWでVXLAN用のポート開けてVXLANを足してボンディングしてブリッジインターフェイスに繋ぎこむだけなので割愛します。

その他設定

同上。

正常に対向側(自宅ルーター側)でVultrのIPv6を使ってGUAで通信できるか確認

QEMU/KVMの仮想マシンで確認

適当なQEMU/KVM仮想マシンを作って、接続する仮想ネットワークインターフェースのネットワークソースに、GUA用のブリッジデバイスを指定します。
その際、XMLを編集して次のような形にします。

<interface type="bridge">
  <mac address="(仮想マシンのMACアドレス)"/>
  <source bridge="nativeBridge"/>
  <virtualport type="openvswitch">
  </virtualport>
  <model type="virtio"/>
</interface>

あとはQEMU/KVMがよしなに取り計らってくれます(多分)。

anydesk00002.png

ちゃんと通信できていますね。ヨシ!

0
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
0
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?