%20%E3%81%A8%20IPv6%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9F%20Ubuntu%2018.04%20%E4%B8%8A%E3%81%AE%20Xen.png)
私は Hetzner で専用サーバーをレンタルし、Ubuntu サーバー 18.04 LTS をインストールしました。プライベート ネットワークをインターネットに接続するために、xxxx と yyyy という名前の 2 つのパブリック IPv4 アドレスと 1 つの IPv6 /64 ブロックがあります。IPv4 には NAT を使用します。
私のネットワークは、Netplan を使用して次のように構成されています。
network:
version: 2
renderer: networkd
ethernets:
eth0:
addresses:
- x.x.x.x/32
- y.y.y.y/32
- a.a.a.a::2/64
routes:
- on-link: true
to: 0.0.0.0/0
via: z.z.z.z
gateway6: fe80::1
nameservers:
addresses:
- 1.1.1.1
- 1.0.0.1
- 2606:4700:4700::1111
- 2606:4700:4700::1001
bridges:
xenbr0:
interfaces: []
addresses:
- 192.168.0.1/24
- a.a.a.a::3/64
parameters:
forward-delay: 0
stp: false
xenbr1:
interfaces: []
addresses:
- 192.168.1.1/24
- a.a.a.a::4/64
parameters:
forward-delay: 0
stp: false
XEN のインストールと構成:
sudo apt-get install xen-hypervisor-amd64 xen-tools
sudo reboot
sudo vim /etc/default/grub
GRUB_CMDLINE_XEN_DEFAULT="dom0_mem=min:1024M,max:1024M dom0_max_vcpus=2 dom0_vcpus_pin"
sudo vim /etc/xen/xl.conf
autoballoon=0
sudo update-grub
sudo reboot
VM は、IP 転送と NAT を使用してインターネットとの間でアクセス可能である必要があります。
sudo vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sudo sysctl -p /etc/sysctl.conf
sudo apt-get install iptables-persistent
NAT 部分:
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
HTTP および HTTPS リクエストを VM2 サーバーに転送します。
sudo iptables -A PREROUTING -t nat -p tcp -i eth0 -d x.x.x.x --dport 80 -j DNAT --to 192.168.0.11:80
sudo iptables -A PREROUTING -t nat -p tcp -i eth0 -d x.x.x.x --dport 443 -j DNAT --to 192.168.0.11:443
192.168.0.x <-> 192.168.0.y 間のトラフィックは望ましくないので、いくつかの簡単なルールですべてのデータ パッケージをドロップします。これにより、ブリッジ間の通信がブロックされます。
sudo iptables -P FORWARD DROP
sudo iptables -A FORWARD -i eth0 -o xenbr0 -j ACCEPT
sudo iptables -A FORWARD -i xenbr0 -o eth0 -s 192.168.0.0/24 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o xenbr1 -j ACCEPT
sudo iptables -A FORWARD -i xenbr1 -o eth0 -s 192.168.1.0/24 -j ACCEPT
IPv4 部分は完璧に動作しますが、IPv6 は動作しません。VM に IPv6 アドレスを手動で割り当てました。VM1 にログインすると、アドレス ::3 の xenbr0 とアドレス ::11 の VM2 に ping できますが、アドレス ::2 の eth0 に ping できません。ブリッジが IPv6 トラフィックがネットワークから出ないようにしているようですが、その理由がわかりません。
答え1
なんとか解決できました。鍵となるのは、VM のゲートウェイとして機能する /128 ネットマスクの IPv6 アドレスを使用することです。まずは Netplan 構成の変更から始めましょう。
network:
version: 2
renderer: networkd
ethernets:
eth0:
addresses:
- x.x.x.x/32
- y.y.y.y/32
- a.a.a.a::00/128
- a.a.a.a::10/128
routes:
- on-link: true
to: 0.0.0.0/0
via: z.z.z.z
gateway6: fe80::1
nameservers:
addresses:
- 1.1.1.1
- 1.0.0.1
- 2606:4700:4700::1111
- 2606:4700:4700::1001
bridges:
xenbr0:
interfaces: []
addresses:
- 192.168.0.1/24
- a.a.a.a::00/125
parameters:
forward-delay: 0
stp: false
xenbr1:
interfaces: []
addresses:
- 192.168.1.1/24
- a.a.a.a::10/125
parameters:
forward-delay: 0
stp: false
eth0、xenbr0、xenbr1 インターフェイスに割り当てられた IPv6 アドレスに注意してください。Eth0 は 2 つの単一の IPv6 (/128) アドレスを取得しますが、xenbr0 と xenbr1 は VM に使用できる 8 つのアドレス ブロック (/125) を取得します。VM1 のネットワーク構成は次のようになります。
# The loopback network interface
auto lo
iface lo inet loopback
iface lo0 inet6 loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.0.10
netmask 255.255.255.0
broadcast 192.168.0.255
network 192.168.0.0
gateway 192.168.0.1
iface eth0 inet6 static
address a:a:a:a::01
netmask 125
gateway a:a:a:a::00
別のブリッジを使用する VM3 構成:
# The loopback network interface
auto lo
iface lo inet loopback
iface lo0 inet6 loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.1.10
netmask 255.255.255.0
broadcast 192.168.1.255
network 192.168.1.0
gateway 192.168.1.1
iface eth0 inet6 static
address a:a:a:a::11
netmask 125
gateway a:a:a:a::10
最後に、IPv6 の IP 転送を有効にすることを忘れないでください。
sudo vim /etc/sysctl.conf
net.ipv6.conf.all.forwarding=1
sudo sysctl -p /etc/sysctl.conf