Перенаправлять трафик с порта 22 на виртуальный компьютер в ubuntu

Я пытаюсь перенаправить трафик с порта 22 на хост-машине на порт 22 на виртуальной машине.

На моем хосте работает ubuntu.

Я пытался выполнить эту команду на моем хосте: iptables -t nat -A PREROUTING -d 192.168.1.161 -p tcp --dport 22 -j DNAT --to 192.168.122.2:22, который не дал возврата. Никаких ошибок или другой информации не показано.

При запуске tcpdump -i eno1 port 22 и попытке подключиться к порту 22 я действительно вижу пакеты, поступающие на хост. Запуск эквивалента на виртуальной машине не показывает входящих пакетов. S

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

Я проверил, могу ли я подключиться с хоста к виртуальной машине.

cat / proc / sys / net / ipv4 / ip_forward возвращает 1

Если я попытаюсь подключиться к виртуальной машине по ssh с хоста ( ssh user@192.168.122.2 ), все будет нормально. Если я попробую со своей рабочей станции (в той же сети, что и хост) ssh user@192.168.1.161 истекает время ожидания. Как упоминалось в tcpdump, я вижу пакеты, поступающие на хост, но, похоже, не перенаправляются на виртуальную машину. У меня есть SSH для самого хоста, работающего на нестандартном порту.

Хост работает под управлением Ubuntu 17.10. Гость работает под управлением Debian GNU / Linux 9

Виртуальная машина запускается с помощью KVM, и я управляю ею с помощью virt-manager.

ifconfig хоста:

eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.161  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 2a00:7660:142d:0:8a51:fbff:fe4a:9ed1  prefixlen 64  scopeid 0x0<global>
        inet6 2a00:7660:142d::140  prefixlen 128  scopeid 0x0<global>
        inet6 fe80::8a51:fbff:fe4a:9ed1  prefixlen 64  scopeid 0x20<link>
        ether 88:51:fb:4a:9e:d1  txqueuelen 1000  (Ethernet)
        RX packets 62604  bytes 10855077 (10.8 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 69941  bytes 36442632 (36.4 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 20  memory 0xf7f00000-f7f20000

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 10625  bytes 27445185 (27.4 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 10625  bytes 27445185 (27.4 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:04:bb:9b  txqueuelen 1000  (Ethernet)
        RX packets 1155  bytes 142293 (142.2 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1667  bytes 650997 (650.9 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::fc54:ff:fe12:71ae  prefixlen 64  scopeid 0x20<link>
        ether fe:54:00:12:71:ae  txqueuelen 1000  (Ethernet)
        RX packets 1155  bytes 158463 (158.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4349  bytes 794450 (794.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
0
задан 22 May 2018 в 16:20
3 ответа

Я обнаружил, что это работает: https://ubuntuforums.org/showthread.php?t=2261173&p=13210545#post13210545

TL; DR

iptables -t nat -I PREROUTING -p tcp -d x.x.104.49 --dport 22 -j DNAT --to-destination 192.168.122.20:22
iptables -I FORWARD -m state -d 192.168.122.20/24 --state NEW,RELATED,ESTABLISHED -j ACCEPT
0
ответ дан 5 December 2019 в 06:01

Какова политика по умолчанию для ваших iptables (можно проверить с помощью iptables -L )? Если он установлен на DROP, вам также необходимо включить пересылку на виртуальную машину:

iptables -A FORWARD -p tcp -d 192.168.1.161 --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Изменить: Я предполагаю, что маскарадинг включен, поскольку вы используете virt-manager, который использует libvirt, и это поведение по умолчанию с режимом NAT. Вы должны изменить свои правила iptables на:

iptables -t nat -A PREROUTING -i eno1 -p tcp --dport 22 -j DNAT --to 192.168.122.2:22
iptables -A FORWARD -p tcp -i eno1 --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Если маскарадинг не включен, ваша виртуальная машина должна иметь маршрут к вашей домашней сети для ответа.

0
ответ дан 5 December 2019 в 06:01

Я обнаружил, что эти ответы работают, за исключением того, что они не работают с самого хоста на виртуальную машину. Поэтому я предлагаю добавить правило OUTPUT к ответу для маршрутизации с хост-машины на виртуальную машину.

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

Ключ был найден здесь: перенаправление порта iptables не работает для локального хоста , что указывает на то, что PREROUTING не используется интерфейсом обратной связи.

1
ответ дан 4 August 2020 в 12:58

Теги

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