LINUX.ORG.RU
ФорумAdmin

kvm проброс портов, nat

 , ,


1

2

Здравствуйте. Мне нужно пробросить наружу порт виртуальной машины kmv, чтобы можно было подключиться к ней по ssh. Есть домашний роутер к которому подключен сервер. На нем, в nat, к хост серверу проброшен порт 5373 (192.168.1.36:5373). Пытаюсь сделать за натом роутера еще один проброс порта с хост машины (сервера) на виртуалку 192.168.1.36:5373 -> 192.168.122.174:22 но ничего не работает и я не могу понять почему. Виртуальная машина использует сеть default.

PS. Я делал бридж по гайдам, он работает хорошо, роутер видит все виртуалки и можно их натить как обычные компы в общей локальной сети, но сейчас я бы хотел настроить nat на сервере и получить доступ к виртуалкам именно этим способом.

Система: ubuntu 14.04

Правила которые пытаюсь применить:

iptables -t nat -I PREROUTING -p tcp -d 192.168.1.36 --dport 5373 -j DNAT --to 192.168.122.174:22
iptables -I FORWARD -p tcp -d 192.168.122.174 --dport 22  -j ACCEPT

Есть:

echo «net.ipv4.ip_forward = 1» >> /etc/sysctl.conf && sysctl -p

/etc/network/interfaces на гостевой машине машине

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

/etc/network/interfaces на хост машине

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto em1
iface em1 inet dhcp

-----
ifconfig гостевой машины (картинкой)
http://hostingkartinok.com/show-image.php?id=a63639f94a3a09722e1c2c88191e6449
-----

ifconfig хост машины

em1       

Link encap:Ethernet  HWaddr 4c:72:b9:43:d5:30  
          inet addr:192.168.1.36  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::4e72:b9ff:fe43:d530/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:224 errors:0 dropped:0 overruns:0 frame:0
          TX packets:234 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:25820 (25.8 KB)  TX bytes:32292 (32.2 KB)
          Interrupt:20 Память:fe500000-fe520000 

lo        

Link encap:Локальная петля (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:143 errors:0 dropped:0 overruns:0 frame:0
          TX packets:143 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:9509 (9.5 KB)  TX bytes:9509 (9.5 KB)

virbr0    

Link encap:Ethernet  HWaddr fe:54:00:49:94:1b  
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:24 errors:0 dropped:0 overruns:0 frame:0
          TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:2096 (2.0 KB)  TX bytes:1688 (1.6 KB)

vnet0     

Link encap:Ethernet  HWaddr fe:54:00:49:94:1b  
          inet6 addr: fe80::fc54:ff:fe49:941b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:24 errors:0 dropped:0 overruns:0 frame:0
          TX packets:72 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500 
          RX bytes:2432 (2.4 KB)  TX bytes:5040 (5.0 KB)

Подключение происходит долго и в итоге обрывается.


Ответ на: комментарий от Qmars

upd: если существует ssh подключение к хост серверу, то неудачное подключение к его гостю обрывает ssh с хост сервером.

Qmars ()
Ответ на: комментарий от Black_Shadow

Добавил

iptables -A INPUT -p tcp --dport 5373 -j ACCEPT
не помогло.

Вывод iptables-save:

# Generated by iptables-save v1.4.21 on Thu Jan 14 11:31:28 2016
*mangle
:PREROUTING ACCEPT [337:26620]
:INPUT ACCEPT [322:25480]
:FORWARD ACCEPT [15:1140]
:OUTPUT ACCEPT [295:28267]
:POSTROUTING ACCEPT [310:29407]
-A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT
# Completed on Thu Jan 14 11:31:28 2016
# Generated by iptables-save v1.4.21 on Thu Jan 14 11:31:28 2016
*filter
:INPUT ACCEPT [316:24584]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [293:27611]
-A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5373 -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 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 192.168.122.174/32 -p tcp -m tcp --dport 22 -j ACCEPT
-A OUTPUT -o virbr0 -p udp -m udp --dport 68 -j ACCEPT
COMMIT
# Completed on Thu Jan 14 11:31:28 2016
# Generated by iptables-save v1.4.21 on Thu Jan 14 11:31:28 2016
*nat
:PREROUTING ACCEPT [13:1973]
:INPUT ACCEPT [11:1821]
:OUTPUT ACCEPT [42:2882]
:POSTROUTING ACCEPT [42:2882]
-A PREROUTING -d 192.168.1.36/32 -p tcp -m tcp --dport 5373 -j DNAT --to-destination 192.168.122.174:22
-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
COMMIT
# Completed on Thu Jan 14 11:31:28 2016

Qmars ()
Ответ на: комментарий от Black_Shadow

Добавил.

iptables -t nat -I POSTROUTING -p tcp -d 192.168.122.17 --dport 22 -j MASQUERADE

Все равно без изменений.

Qmars ()
Ответ на: комментарий от ArcFi

Добавил это к исходным двум правилам.

iptables -I FORWARD -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate NEW -j ACCEPT
iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
Никаких изменений. Все так же.

Qmars ()
Ответ на: комментарий от Qmars

Добавил это к исходным двум правилам.

Их нужно не добавлять, а вставлять в начало цепочки FORWARD.
У вас автоматически вставляемые правила с REJECT рубят трафик.

ArcFi ()
Ответ на: комментарий от Qmars

Решил проблему так:

Полностью очистил правила iptables скриптом

#!/bin/sh
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

Добавил

sudo iptables -t nat -I PREROUTING -p tcp -d 192.168.1.36 --dport 5373 -j DNAT --to 192.168.122.174:22
sudo iptables -I FORWARD -p tcp -d 192.168.122.174 --dport 22  -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o em1 -j MASQUERADE

Все работает

Qmars ()
Ответ на: комментарий от Qmars

Все работает

Чтобы это всё не слетело при ребуте хоста, рестарте системы виртуализации или при холодном ребуте гостя, по-хорошему, надо либо отключить автоматическое добавление правил (в некоторых случаях это нереально), либо написать hook-скрипт, который будет удалять лишние правила и вставлять нужные.

ArcFi ()
Ответ на: комментарий от ArcFi

Да, поставил в /etc/rc.local

sleep 10
/bin/bash /home/user/iptables.sh

Этого мне, вроде, достаточно. Спасибо.

Qmars ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.