IPv4 (NAT) と IPv6 を使用した Ubuntu 18.04 上の Xen

IPv4 (NAT) と IPv6 を使用した Ubuntu 18.04 上の Xen

私は Hetzner で専用サーバーをレンタルし、Ubuntu サーバー 18.04 LTS をインストールしました。プライベート ネットワークをインターネットに接続するために、xxxx と yyyy という名前の 2 つのパブリック IPv4 アドレスと 1 つの IPv6 /64 ブロックがあります。IPv4 には NAT を使用します。

XEN スキーマ 私のネットワークは、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

関連情報