iptables port REDIRECT работает локально, но не извне

iptables port REDIRECT работает локально, но не извне

У меня есть сервер, который может прослушивать только порт 23006. Я хочу получить к нему доступ извне через порт 443.

У меня есть настройка systemctl:

$ sudo sysctl --system
* Applying /usr/lib/sysctl.d/50-pid-max.conf ...
* Applying /usr/lib/sysctl.d/99-protect-links.conf ...
* Applying /etc/sysctl.d/99-sysctl.conf ...
* Applying /etc/sysctl.conf ...
kernel.pid_max = 4194304
fs.protected_fifos = 1
fs.protected_hardlinks = 1
fs.protected_regular = 2
fs.protected_symlinks = 1
net.ipv4.ip_forward = 1
net.ipv4.conf.all.route_localnet = 1
net.ipv4.ip_forward = 1
net.ipv4.conf.all.route_localnet = 1

Если я запущу какой-нибудь другой тестовый сервер для прослушивания порта 443, он заработает, и я смогу получить к нему доступ извне. Но это всего лишь тестовый сервер, а не моя реальная серверная программа.

Если я запущу socat:

sudo nohup socat TCP-LISTEN:443,pktinfo,fork TCP:127.0.0.1:23006

он работает и я могу получить к нему доступ извне. Но мой сервер не видит реальный IP-адрес клиента.

Если я запускаю curl на порту 23006, мой реальный сервер отвечает:

$ curl 127.0.0.1:23006
<html>
<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<center>The plain HTTP request was sent to HTTPS port</center>
<hr><center>nginx/1.24.0</center>
</body>
</html>

Если я выполню эту команду iptables:

sudo iptables -t nat -A OUTPUT -o lo -p tcp --dport 443 -j REDIRECT --to-port 23006

тогда я также смогу получить доступ к своему серверу через порт 443, но ТОЛЬКО локально:

$ curl 127.0.0.1:443
<html>
<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<center>The plain HTTP request was sent to HTTPS port</center>
<hr><center>nginx/1.24.0</center>
</body>
</html>

Проблема в следующем: я не могу получить доступ к своему серверу извне через порт 443. Пожалуйста, помогите. Заранее спасибо.

решение1

sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 23006

решение2

Если вы хотите перенаправитьвходящийтрафик, используйте PREROUTINGцепь.

Кроме того, если вы хотите перенаправление, рекомендуется использовать вместо этого таблицу mangleили .nat

Связанный контент