Настройка переадресации портов на сервере Ubuntu: Полное руководство
Когда вы работаете с сетями и серверами, одним из оперативных заданий может стать настройка переадресации портов. В этой статье мы разберем, как настроить переадресацию портов на сервере под управлением Ubuntu, который использует Wi-Fi и Ethernet для подключения к различным сетям.
Информация о сети и оборудовании
Итак, у нас есть сервер на базе Ubuntu с двумя интерфейсами:
- Wi-Fi (wlo1) с подсетью 10.42.1.0/24
- Ethernet (enp44s0) с подсетью 10.42.0.0/24
Сервер имеет IP-адреса 10.42.0.1 и 10.42.1.1. В проводной сети у нас есть рабочая станция с веб-сервером с IP-адресом 10.42.0.216. Мы также имеем телефон, подключенный к Wi-Fi, с IP-адресом 10.42.1.111. Цель состоит в том, чтобы настроить переадресацию портов таким образом, чтобы при подключении к адресу 10.42.1.1 с телефона запросы перенаправлялись на рабочую станцию и ее веб-сервер.
Установка и настройка UFW
Ubuntu идет с брандмауэром UFW (Uncomplicated Firewall), однако его функционал для переадресации портов достаточно ограничен. Чтобы настроить переадресацию портов, необходимо внести изменения в системные файлы.
- Раскомментируйте строку
net/ipv4/ip_forward=1
в файле/etc/ufw/sysctl.conf
. - Установите
DEFAULT_FORWARD_POLICY="ACCEPT"
в файле/etc/default/ufw
. - Разрешите порты 80 и 443 с помощью правил UFW.
Редактирование правил UFW
Добавьте следующее в начало файла /etc/ufw/before.rules
:
*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -d 10.42.1.1 -p tcp --dport 80 -j DNAT --to-destination 10.42.0.216:80
-A PREROUTING -d 10.42.1.1 -p tcp --dport 443 -j DNAT --to-destination 10.42.0.216:443
-A POSTROUTING -s 10.42.0.0/24 -j MASQUERADE
COMMIT
Однако, даже после внесения всех изменений и настройки UFW, проблемы могут сохраняться.
Понимание nftables и NetworkManager
С недавними обновлениями Ubuntu появился nftables, который заменил классический iptables для настройки брандмауэра. Это может вызывать путаницу, особенно если у вас уже есть созданные правила iptables.
У Ubuntu также есть NetworkManager, который может автоматически устанавливать правила nftables. Эта автоматизация иногда может блокировать необходимую связь между сетями. Чтобы проверить, какие правила применяются NetworkManager’ом, используйте команду:
nft list ruleset
Обратите внимание на правила, которые могут блокировать трафик между wlo1 и enp44s0. Если вы видите такие строки, как iifname "wlo1" reject
, это и есть источник проблемы.
Решение проблемы с блокировкой
Чтобы NetworkManager не устанавливал свои правила брандмауэра, вам необходимо отредактировать файл /etc/NetworkManager/NetworkManager.conf
и добавить следующую строку в раздел [main]
:
firewall-backend=none
Теперь у вас будет возможность вручную настраивать правила брандмауэра. Вот пример скрипта nftables, который можно использовать для настройки переадресации:
#!/usr/sbin/nft -f
# Flush the rule set
flush ruleset
# Поделиться интернетом с компьютерами на Wi-Fi
table ip nm-shared-wlo1 {
chain nat_postrouting {
type nat hook postrouting priority srcnat; policy accept;
ip saddr 10.42.1.0/24 ip daddr != 10.42.1.0/24 masquerade
}
chain filter_forward {
type filter hook forward priority filter; policy accept;
ip daddr 10.42.1.0/24 oifname "wlo1" ct state { established, related } accept
ip saddr 10.42.1.0/24 iifname "wlo1" accept
iifname "enp44s0" oifname "wlo1" accept
iifname "wlo1" oifname "enp44s0" accept
iifname "wlo1" reject
oifname "wlo1" reject
}
}
Заключение
Теперь, когда вы внесли необходимые изменения, вы сможете настроить переадресацию портов на своем сервере Ubuntu. Для этого просто добавьте кабельный частный IP-адрес и настройте NAT для перенаправления трафика. Опираясь на приведенные шаги, вы сможете избежать проблемы "недоступности порта". Не забывайте тестировать соединения, используя такие инструменты, как telnet
или curl
, чтобы убедиться, что все работает как следует.