Порт передачи в Гостевой операционной системе С Libvirt

Я в настоящее время выполняю Гипервизор Xen под Ubuntu 14.04. На хост-машине я выполняю гостя VM.

Из того, что я понимаю, Чтобы смочь получить входящие соединения на виртуальной машине, я должен сначала записать рычаг, который редактирует мой iptables когда гость инициируется.

Я использую Диспетчера виртуальных машин в качестве GUI для инициирования моего VMs. рычаг, который я настроил, расположен /etc/libvirt/hooks/qemu Я пытаюсь открыться TCP/UDP port 6969 и UDP port 17 для моего маркированного VM"Windows"

    #!/bin/bash
    # used some from advanced script to have multiple ports: use an equal number of$

    # Update the following variables to fit your setup
    Guest_name=Windows
    Guest_ipaddr=192.168.122.99
    Host_ipaddr=192.168.122.1
    Host_port=(  '6969' '17' )
    Guest_port=( '6969' '17' )

    length=$(( ${#Host_port[@]} - 1 ))
    if [ "${1}" = "${Guest_name}" ]; then
       if [ "${2}" = "stopped" ] || [ "${2}" = "reconnect" ]; then
           for i in `seq 0 $length`; do
                   iptables -t nat -D PREROUTING -d ${Host_ipaddr} -p tcp --dport $$
                   iptables -D FORWARD -d ${Guest_ipaddr}/32 -p tcp -m state --stat$
           done
       fi
       if [ "${2}" = "start" ] || [ "${2}" = "reconnect" ]; then
           for i in `seq 0 $length`; do
                   iptables -t nat -A PREROUTING -d ${Host_ipaddr} -p tcp --dport $$
                   iptables -I FORWARD -d ${Guest_ipaddr}/32 -p tcp -m state --stat$
           done
       fi
    fi

ifconfig - то, где я получил информацию

    $ ifconfig
    eth0      Link encap:Ethernet  HWaddr d0:50:99:67:4a:b7  
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:17367 errors:0 dropped:6 overruns:0 frame:0
              TX packets:13439 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:3494857 (3.4 MB)  TX bytes:2707716 (2.7 MB)

    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:3774 errors:0 dropped:0 overruns:0 frame:0
              TX packets:3774 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:1303572 (1.3 MB)  TX bytes:1303572 (1.3 MB)

    vif1.0    Link encap:Ethernet  HWaddr fe:ff:ff:ff:ff:ff  
              UP BROADCAST MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:32 
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

    vif1.0-emu Link encap:Ethernet  HWaddr fe:ff:ff:ff:ff:ff  
              inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:1613 errors:0 dropped:0 overruns:0 frame:0
              TX packets:3307 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:500 
              RX bytes:508517 (508.5 KB)  TX bytes:1054123 (1.0 MB)

    xenbr0    Link encap:Ethernet  HWaddr d0:50:99:67:4a:b7  
              inet addr:192.168.2.100 Bcast:192.168.2.255 Mask:255.255.255.0
              inet6 addr: fe80::d250:99ff:fe67:4ab7/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:14808 errors:0 dropped:0 overruns:0 frame:0
              TX packets:11826 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:2478850 (2.4 MB)  TX bytes:2165931 (2.1 MB)

Это iptables, которые, кажется, идут освобожденные с рычагом

    $ sudo iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
    ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps
    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps

    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination         
    ACCEPT     all  --  anywhere             192.168.122.0/24     ctstate RELATED,ESTABLISHED
    ACCEPT     all  --  192.168.122.0/24     anywhere            
    ACCEPT     all  --  anywhere             anywhere            
    REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
    REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
    ACCEPT     all  --  anywhere             anywhere             PHYSDEV match --physdev-out vif2.0 --physdev-is-bridged
    ACCEPT     all  --  anywhere             anywhere             PHYSDEV match --physdev-in vif2.0 --physdev-is-bridged
    ACCEPT     all  --  anywhere             192.168.122.0/24     state NEW,RELATED,ESTABLISHED

    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination         
    ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootpc

Это - то, где я получил рычаг: http://wiki.libvirt.org/page/Networking#Forwarding_Incoming_Connections

Некоторые люди собираются быть любопытными на предмет сетевых интерфейсов, таким образом, здесь:

    auto lo
    iface lo inet loopback

    auto eth0
    iface eth0 inet manual

    auto xenbr0
    iface xenbr0 inet static
            bridge_ports eth0
            address 192.168.2.100
            netmask 255.255.255.0
            gateway 192.168.2.1
            dns-nameservers 192.168.2.1

Конфигурация стандартной сети:

    <network>
      <name>default</name>
      <bridge name="virbr0"/>
      <forward/>
      <ip address="192.168.122.1" netmask="255.255.255.0">
        <dhcp>
          <range start="192.168.122.2" end="192.168.122.254"/>
        </dhcp>
      </ip>
    </network>

Вывод sudo iptables -t nat -v -x -n -L:

    Chain PREROUTING (policy ACCEPT 4326 packets, 267215 bytes)
        pkts      bytes target     prot opt in     out     source               destination         
           9      528 DNAT       tcp  --  *      *       0.0.0.0/0            192.168.2.100        tcp dpt:6969 to:192.168.122.99:6969
           0        0 DNAT       tcp  --  *      *       0.0.0.0/0            192.168.2.100        tcp dpt:6969 to:192.168.122.0:6969
           0        0 DNAT       tcp  --  *      *       0.0.0.0/0            192.168.122.1        tcp dpt:6969 to:192.168.122.0:6969
           0        0 DNAT       tcp  --  *      *       0.0.0.0/0            192.168.122.1        tcp dpt:6969 to:192.168.122.99:6969

    Chain INPUT (policy ACCEPT 3457 packets, 177928 bytes)
        pkts      bytes target     prot opt in     out     source               destination         

    Chain OUTPUT (policy ACCEPT 2010 packets, 132685 bytes)
        pkts      bytes target     prot opt in     out     source               destination         

    Chain POSTROUTING (policy ACCEPT 2609 packets, 213516 bytes)
        pkts      bytes target     prot opt in     out     source               destination         
           5      365 RETURN     all  --  *      *       192.168.122.0/24     224.0.0.0/24        
           0        0 RETURN     all  --  *      *       192.168.122.0/24     255.255.255.255     
           0        0 MASQUERADE  tcp  --  *      *       192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
           0        0 MASQUERADE  udp  --  *      *       192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
           0        0 MASQUERADE  all  --  *      *       192.168.122.0/24    !192.168.122.0/24  
0
задан 1 August 2015 в 20:36
2 ответа

После публикации конфигурации сети я вижу, что вы используете другую подсеть для Libvirt. Это неправильно, особенно с учетом того, что вы используете 192.168.2.100 на интерфейсе моста, который вы используете для Libvirt, в то время как виртуальные машины (которые находятся на том же мосту) выделяются 192.168.122.0/24 .

В любом случае, если вы настаиваете на использовании двойного NAT, отразите это в своих настройках. Либо установите режим NAT, либо используйте один и тот же диапазон IP-адресов на обоих концах моста.

То, что вы делаете сейчас, чрезвычайно сбивает с толку и в какой-то момент придет и укусит вас. На ваш вопрос уже был дан ответ о сбое сервера (хотя потребовалось некоторое время, чтобы выяснить, в чем на самом деле был ваш вопрос). Вот он: iptables перенаправление портов на debian .

0
ответ дан 5 December 2019 в 12:30

РЕДАКТИРОВАТЬ: Оказывается, OP использует мост с двумя разными подсетями. Это не было ясно из вопроса перед редактированием, и этот ответ был написан с предположением, что оба конца моста имеют одну и ту же подсеть.

Вы не используете NAT на своем компьютере Libvirt. Я подозреваю, что у вас домашняя лаборатория, а модем вашего интернет-провайдера выполняет NAT за вас? Ваш блок Libvirt настроен с использованием моста.

Это означает, что, скорее всего, вам не нужно ничего делать и команды iptables в вашем коде не нужны. Виртуальные машины уже доступны в вашей локальной сети 192.168.2.0/24 , и если вы хотите сделать их доступными из Интернета, вам придется сделать это в маршрутизаторе (не проблема Libvirt, не


В качестве исключения виртуальные машины могут быть заблокированы , если вы используете ebtables или net.bridge.bridge- nf-call-iptables включен. Однако я сомневаюсь, что здесь дело обстоит именно так.

0
ответ дан 5 December 2019 в 12:30

Теги

Похожие вопросы