Вопрос или проблема
У меня уже есть нат, работающий на enp3s5(внутренний) к enp2s0(внешний). Все работает на выход и на вход, если указано.
Я хочу разрешить входящий трафик с 59027 пройти на 5927 на определенный IP-адрес.
Добавлено правило пользователя
-A ufw-user-input -i enp0s2 -p tcp --dport 59027 -j ACCEPT
-A ufw-user-input -i enp0s2 -p udp --dport 59027 -j ACCEPT
и PREROUTING
-A PREROUTING -p tcp --dport 59027 -i enp0s2 -j DNAT --to-destination 192.168.0.27:5900
с пересылкой в моих фильтрах
:FORWARD ACCEPT [0:0]
-A FORWARD -p tcp -d 192.168.0.27 --dport 5900 -i enp0s2 -o enp3s5 -j ACCEPT
Я сделал отключение и включение без ошибок, но это не работает. Я что-то пропустил?
до
#
# rules.before
#
# Правила, которые должны выполняться перед добавленными через командную строку ufw правилами. Пользовательские
# правила должны быть добавлены в одну из этих цепочек:
# ufw-before-input
# ufw-before-output
# ufw-before-forward
#
#nat
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
# Перенаправления портов
-A PREROUTING -p tcp --dport 59027 -i enp0s2 -j DNAT --to-destination 192.168.0.27:5900
-A PREROUTING -i enp2s0 -p tcp --dport 22 -j DNAT --to-destination 192.168.0.19
#-A POSTROUTING -s 192.168.0.1/24 -o enp2s0 -j MASQUERADE
#-A POSTROUTING -s enp3s5 -o enp2s0 -j MASQUERADE
-A POSTROUTING -s 192.168.0.0/24 -o enp2s0 -j MASQUERADE
COMMIT
#mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
#-A FORWARD -i enp3s5 -j ACCEPT
# Не удаляйте эти необходимые строки, в противном случае возникнут ошибки
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
:FORWARD ACCEPT [0:0]
-A FORWARD -p tcp -d 192.168.0.27 --dport 5900 -i enp0s2 -o enp3s5 -j ACCEPT
# Конец необходимых строк
# разрешить все на loopback
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-output -o lo -j ACCEPT
# быстро обрабатывать пакеты, для которых у нас уже есть соединение
-A ufw-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-output -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# отбрасывать невалидные пакеты (регистрирует их на уровне логирования medium и выше)
-A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
-A ufw-before-input -m conntrack --ctstate INVALID -j DROP
# корректные коды icmp для INPUT
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
# корректный код icmp для FORWARD
-A ufw-before-forward -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type echo-request -j ACCEPT
# позволить клиенту dhcp работать
-A ufw-before-input -p udp --sport 67 --dport 68 -j ACCEPT
#
# ufw-not-local
#
-A ufw-before-input -j ufw-not-local
# если LOCAL, RETURN
-A ufw-not-local -m addrtype --dst-type LOCAL -j RETURN
# если MULTICAST, RETURN
-A ufw-not-local -m addrtype --dst-type MULTICAST -j RETURN
# если BROADCAST, RETURN
-A ufw-not-local -m addrtype --dst-type BROADCAST -j RETURN
# все другие не локальные пакеты отбрасываются
-A ufw-not-local -m limit --limit 3/min --limit-burst 10 -j ufw-logging-deny
-A ufw-not-local -j DROP
COMMIT
пользователь
*filter
:ufw-user-input - [0:0]
:ufw-user-output - [0:0]
:ufw-user-forward - [0:0]
:ufw-before-logging-input - [0:0]
:ufw-before-logging-output - [0:0]
:ufw-before-logging-forward - [0:0]
:ufw-user-logging-input - [0:0]
:ufw-user-logging-output - [0:0]
:ufw-user-logging-forward - [0:0]
:ufw-after-logging-input - [0:0]
:ufw-after-logging-output - [0:0]
:ufw-after-logging-forward - [0:0]
:ufw-logging-deny - [0:0]
:ufw-logging-allow - [0:0]
:ufw-user-limit - [0:0]
:ufw-user-limit-accept - [0:0]
### ПРАВИЛА ###
### tuple ### разрешить tcp 5900:59999 0.0.0.0/0 any 0.0.0.0/0 in
-A ufw-user-input -p tcp -m multiport --dports 5900:59999 -j ACCEPT
### tuple ### разрешить tcp 22 0.0.0.0/0 any 0.0.0.0/0 in
-A ufw-user-input -p tcp --dport 22 -j ACCEPT
### tuple ### разрешить udp 137,138 0.0.0.0/0 any 0.0.0.0/0 Samba - in
-A ufw-user-input -p udp -m multiport --dports 137,138 -j ACCEPT -m comment --comment 'dapp_Samba'
### tuple ### разрешить tcp 139,445 0.0.0.0/0 any 0.0.0.0/0 Samba - in
-A ufw-user-input -p tcp -m multiport --dports 139,445 -j ACCEPT -m comment --comment 'dapp_Samba'
### tuple ### разрешить любой 59027 0.0.0.0/0 any 0.0.0.0/0 in_enp0s2
-A ufw-user-input -i enp0s2 -p tcp --dport 59027 -j ACCEPT
-A ufw-user-input -i enp0s2 -p udp --dport 59027 -j ACCEPT
### tuple ### разрешить любой 59025 0.0.0.0/0 any 0.0.0.0/0 in_enp0s2
-A ufw-user-input -i enp0s2 -p tcp --dport 59025 -j ACCEPT
-A ufw-user-input -i enp0s2 -p udp --dport 59025 -j ACCEPT
### tuple ### разрешить любой 59023 0.0.0.0/0 any 0.0.0.0/0 in_enp0s2
-A ufw-user-input -i enp0s2 -p tcp --dport 59023 -j ACCEPT
-A ufw-user-input -i enp0s2 -p udp --dport 59023 -j ACCEPT
### tuple ### разрешить любой 59021 0.0.0.0/0 any 0.0.0.0/0 in_enp0s2
-A ufw-user-input -i enp0s2 -p tcp --dport 59021 -j ACCEPT
-A ufw-user-input -i enp0s2 -p udp --dport 59021 -j ACCEPT
### tuple ### разрешить любой 59029 0.0.0.0/0 any 0.0.0.0/0 in_enp0s2
-A ufw-user-input -i enp0s2 -p tcp --dport 59029 -j ACCEPT
-A ufw-user-input -i enp0s2 -p udp --dport 59029 -j ACCEPT
### КОНЕЦ ПРАВИЛ ###
### ЛОГИРОВАНИЕ ###
-I ufw-user-logging-input -j RETURN
-I ufw-user-logging-output -j RETURN
-I ufw-user-logging-forward -j RETURN
### КОНЕЦ ЛОГИРОВАНИЯ ###
### ЛИМИТИРОВАНИЕ ###
-A ufw-user-limit -j REJECT
-A ufw-user-limit-accept -j ACCEPT
### КОНЕЦ ЛИМИТИРОВАНИЯ ###
COMMIT
Ответ или решение
Проблема, описанная вами, связана с необходимостью настройки перенаправления портов для VNC через NAT, чтобы трафик с внешнего порта 59027 перенаправлялся на внутренний IP-адрес и порт 192.168.0.27:5900. Давайте подробно рассмотрим основные шаги и возможные ошибки в этой конфигурации.
Теория:
Перенаправление портов с помощью iptables требует настройки нескольких таблиц: nat
для перенаправления пакетов и filter
для разрешения их прохождения. Вы уже добавили правила в PREROUTING
, пользуетесь NAT и обеспечиваете доступ к внутренней сети через UFW. Однако могут быть некоторые моменты, на которые стоит обратить внимание:
-
Правильность конфигурации интерфейсов: Убедитесь, что указанные интерфейсы (enp0s2, enp3s5, enp2s0) соответствуют вашей сети. Возможно, перепутаны входящие и исходящие интерфейсы.
-
Порт и IP-адрес назначения: Проверьте, что IP-адрес 192.168.0.27 действительно активен и слушает на порту 5900.
-
Правильная последовательность и наличие необходимых правил: Возможно, требуется больше правил, чтобы пакеты могли перемещаться между таблицами
nat
иfilter
.
Пример:
Из вашего сценария:
-A PREROUTING -p tcp --dport 59027 -i enp0s2 -j DNAT --to-destination 192.168.0.27:5900
-A FORWARD -p tcp -d 192.168.0.27 --dport 5900 -i enp0s2 -o enp3s5 -j ACCEPT
-A POSTROUTING -s 192.168.0.0/24 -o enp2s0 -j MASQUERADE
Эти правила выглядят корректно с точки зрения структурирования, однако необходимо убедиться, что они выполняются в правильном порядке, и что нет конфликтующих правил, которые могут препятствовать обработке данных.
Применение:
-
Проверка маршрутизации (статуса интерфейсов):
Убедитесь, что интерфейсы enp3s5 (внутренний) и enp2s0 (внешний) настроены правильно и активно работают.
-
Диагностика и логгирование:
Включите логирование для диагностики проблем, чтобы отслеживать, какие пакеты достигают тела таблиц
filter
иnat
. Это можно сделать добавлением правил логирования сразу перед и после ваших текущих правил, чтобы убедиться, что инжестируете все пакеты. -
Тест конфигурации:
Запустите диагностику командой
iptables -L -v -n
иiptables -t nat -L -v -n
для проверки числа срабатываний правил и нахождения возможных блокировок или контрправил, которые могут препятствовать желаемому перенаправлению. -
Конфигурация/перезапуск сетевых сервисов:
После внесения всех необходимых изменений перезагрузите сетевые службы или перезагрузите сервер для применения всех изменений.
Если вышеуказанные шаги не решают проблему, дальнейшая диагностика может потребовать глубокого анализа сети и конфигураций, так как существует множество факторов, влияющих на маршрутизацию и перенаправление портов.