Шлюз доступен с виртуальной машины, но другие машины в сети недоступны (Целевой хост недоступен)

Если вы хотите, чтобы только 1 IP-адрес имел доступ к порту 22, но вы также хотите перенаправить какой-либо другой порт на локальный порт 22, вам все равно нужно открыть порт 22 для всех, поскольку INPUTправило обрабатывается после правила nat REDIRECT.

Одним из способов может быть:

iptables -t nat -A PREROUTING -s 1.1.1.1 --proto tcp --dport 22 -j ACCEPT
iptables -t nat -A PREROUTING --proto tcp --dport 22 -j REDIRECT --to-port 65535
iptables -t nat -A PREROUTING --proto tcp --dport 2222 -j REDIRECT --to-port 22

iptables -A INPUT --proto tcp --dport 22 -j ACCEPT
iptables -A INPUT --proto tcp --dport 65535 -j DROP

Поскольку таблица nat PREROUTINGобрабатывается первой, исходный адрес 1.1.1.1 для порта 22 принимается (, что означает, что NAT не выполняется ). Другие исходные адреса, пытающиеся достичь порта 22, попадут в следующее правило, перенаправляя входящие пакеты порта 22 на порт 65535 (, к сожалению, вы не можете использовать DROPв таблице PREROUTINGnat ).

Затем подключения к порту 2222 перенаправляются на порт 22, все входящие пакеты на порт 22 принимаются, и, наконец, входящие подключения к порту 65535, которые являются «другими» подключениями к порту 22, сбрасываются.

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

iptables -A INPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT

В противном случае у вас может быть исходящее соединение с исходным портом 65535, и ответы на этот порт будут заблокированы. В качестве альтернативы можно добавить флаг TCP, соответствующий правилу 65535, который соответствует только пакетам SYN.Однако всегда полезно разрешать пакеты ESTABLISHED,RELATEDв начале цепочки INPUT для повышения эффективности.

Не стесняйтесь добавлять -i venet0, если эти правила должны применяться только к пакетам, входящим на этот интерфейс.

0
11.07.2020, 16:41
1 ответ

Ваши хосты имеют IP-адреса :192.168.0.103/29, 192.168.0.102/29 и 192.168.0.101/29. Вся эта подсеть /29 содержит адреса в диапазоне 192.168.0.97 -192.168.0.102. IP-адрес 192.168.0.103/29 не является действительным IP-адресом для передачи хосту, это широковещательный IP-адрес. Кроме того, шлюз имеет IP-адрес 192.168.0.1, поэтому хосты в этой подсети не знают о нем, поскольку он находится в совершенно другой подсети.

Разбить:

Address:   192.168.0.103         11000000.10101000.00000000.01100 111
Netmask:   255.255.255.248 = 29  11111111.11111111.11111111.11111 000
Wildcard:  0.0.0.7               00000000.00000000.00000000.00000 111
=>
Network:   192.168.0.96/29       11000000.10101000.00000000.01100 000 (Class C)
Broadcast: 192.168.0.103         11000000.10101000.00000000.01100 111
HostMin:   192.168.0.97          11000000.10101000.00000000.01100 001
HostMax:   192.168.0.102         11000000.10101000.00000000.01100 110
Hosts/Net: 6                     (Private Internet)

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

Самым простым решением для вас было бы изменение префикса с 29 на 24, чтобы диапазон был широким и содержал все IP-адреса, которые вы уже установили для машин и шлюза.

2
18.03.2021, 23:20

Теги

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