IPv4(NAT) 및 IPv6를 사용하는 Ubuntu 18.04의 Xen

IPv4(NAT) 및 IPv6를 사용하는 Ubuntu 18.04의 Xen

Hetzner에서 전용 서버를 임대하고 여기에 Ubuntu Server 18.04 LTS를 설치했습니다. xxxx 및 yyyy라는 두 개의 공용 IPv4 주소와 개인 네트워크를 인터넷에 연결하는 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

인터넷에서 가상 머신에 액세스하려면 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 부분은 작동하지 않습니다. 가상 머신에 IPv6 주소를 수동으로 할당했습니다. VM1에 로그인하면 주소::3에서 xenbr0을 ping할 수 있고 주소::11에서 VM2를 ping할 수 있지만 주소::2에서 eth0을 ping할 수는 없습니다. 브리지가 IPv6 트래픽이 네트워크에서 나가는 것을 차단하고 있지만 그 이유를 알 수 없는 것과 같습니다.

답변1

나는 그것을 알아낼 수 있었다. 핵심은 가상 머신의 게이트웨이 역할을 하는 /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

관련 정보