iptables / KVM forward port

У меня есть сервер с одним внешним IP-адресом (например, 1.2.3.4 ). На этом сервере я использую libvirt для запуска виртуальных машин. Теперь я хочу получить доступ к виртуальному серверу на моем хосте через ssh ( порт 1234 ) извне.

В моей хост-системе у меня есть сетевой интерфейс eth0 , который подключен к мой внешний IP ( 1.2.3.4 ).

  • Что я здесь делаю не так?
  • UFW мешает iptables?
  • Как мне заставить это работать?
  • Есть ли более простой способ переадресации портов с помощью libvirt / virt-manager? (Я пробовал это: http://secomputing.co.uk/2012/02/21/Forwarding-ports-to-KVM-clients/ что тоже не сработало, потому что XML недействителен при переходе на / он проверяет, но не работает, если я разрешаю его "сети")
3
задан 16 April 2016 в 18:41
4 ответа

Есть несколько вещей, которые мы должны рассмотреть.

Что я здесь делаю не так?

Давайте посмотрим текущую конфигурацию iptables, а затем мы можем ее изучить.

Есть ли UFW мешают iptables?

UFW - это интерфейс командной строки для iptables, но в нем отсутствуют многие функции iptables. Конфигурация iptables покажет нам, что сделал UFW на основе введенных вами команд. Однако вам не следует создавать правила с обоими на одном компьютере. Это требует осложнений. Если вы собираетесь вводить свои команды в UFW, все в порядке, но скрипты iptables должны быть отключены. Если вы собираетесь вводить свои команды в iptables, вам следует удалить UFW.

Как я могу заставить это работать?

Попробуйте это.

iptables -t nat -I PREROUTING -p tcp -i eth0 --dport 1234 -j DNAT --to 192.168.122.235:1234

iptables -A FORWARD -i eth0 -o vibr0 -p tcp --dport 1234 -j ACCEPT

Но имейте в виду, что гость подключен к хосту через NAT с адаптер. Так что это, вероятно, не сработает.

Что вам действительно стоит подумать, так это изменить тип адаптера с NAT на мостовой.

1
ответ дан 3 December 2019 в 07:24

Я думаю, вам также следует использовать мостовое соединение:

Попытайтесь узнать свое имя сети:

 virsh net-edit <network name>

Имя сети, которое вы можете увидеть в Virt Manager. Обычно это значение по умолчанию:

 virsh net-edit default

Переход с NAT на мост (также имя моста, которое вы найдете в Virt Manager)

<network>
   <name>default</name>
   <uuid>cc45a671-e8d8-4149-a6a5-8d5547551a58</uuid>
   <forward mode='route'/>
   <bridge name='virbr0' stp='on' delay='0'/>
   <mac address='AA:CC:DD:86:53:54'/>
   <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>

Примечания:

  • В этом примере мы использовали DHCP для присвоения имен виртуальным машинам. Вы также можете сделать статические настройки

  • Если вы используете ifconfig, вы должны получить:

    virbr0 Link encap: Ethernet Hardware Adresse AA: VV: CC: 86: 53: 54
    inet Адрес: 192.168.122.1 Bcast: 192.168.122.255 Маска: 255.255.255.0 ВВЕРХ ТРАНСЛЯЦИИ МУЛЬТИКАЛТА MTU: 1500 Метрик: 1 RX-Pakete: 127 Фелер: 0 Верлорен: 0 Уберлейф: 0 Фенстер: 0 TX-Pakete: 44 Fehler: 0 Verloren: 0 Überläufe: 0 Träger: 0 Коллизионен: 0 Количество отправлений: 0 RX-Bytes: 13032 (13.0 KB) TX-Bytes: 4707 (4.7 KB)

  • В основном вы должны использовать порт 22 для ssh

  • Попробуйте использовать:

    sudo iptables -t nat -A POSTROUTING -s 192.168 .122.235 -j SNAT --to-source 1.2.3.4

Таким образом, вы можете локализовать, если это проблема с портами. Фактически, вы можете после закрытия портов на виртуальной машине с помощью Gufw.

0
ответ дан 3 December 2019 в 07:24

Это мои правила пересылки, которые довольно хороши.

-A POSTROUTING -s 192.168.122.0/24 -d 224.0.0.0/24 -j RETURN
-A POSTROUTING -s 192.168.122.0/24 -d 255.255.255.255/32 -j RETURN
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE
-A POSTROUTING -s 192.168.122.0/24 -o br1 -j MASQUERADE
-A INPUT -s 192.168.122.0/24 -j ACCEPT
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j ACCEPT
-A FORWARD -i br1 -o virbr0 -j ACCEPT
0
ответ дан 3 December 2019 в 07:24

У меня была практически такая же проблема. Я хотел перенаправить порт 22 с моего хост-компьютера на мою виртуальную машину, также работающую с KVM, с сетью NAT.

Я нашел это сообщение: https://ubuntuforums.org/showthread.php?t=2261173&p=13210545 # post13210545

Который дал мне ответы.

TL; DR

192.168.1.161 - IP моего сервера во внутренней сети. 192.168.122.2 - это мой IP-адрес виртуальной машины на хосте.

iptables -t nat -I PREROUTING -p tcp -d 192.168.1.161 --dport 22 -j DNAT --to-destination 192.168.122.2:22
iptables -I FORWARD -m state -d 192.168.122.2/24 --state NEW,RELATED,ESTABLISHED -j ACCEPT 

Отказ от ответственности. Я понятия не имею, что именно это делает. Он выглядит так же, как и многие другие найденные мной ответы, только некоторые теги параметров немного отличаются.

0
ответ дан 3 December 2019 в 07:24

Теги

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