Я пробовал это, но это только частичный ответ или не подходит для CentOS7. https://serverfault.com/a/320624/439512
Я сделал именно то, что написано, но это неправильно.
$ sudo iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
$ sudo iptables -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT
$ sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
$ curl localhost
curl: (7) Failed connect to localhost:80; Connection refused
$ curl localhost:8080
<html>...</html>
$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:webcache
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Эти две команды будут работать временно, но не после перезапуска:
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 8080
Если вы попытаетесь сохранить это как этот парень говорит, что она полностью сломается и даже умеренно не сработает:
$ sudo systemctl enable iptables
$ sudo service iptables save
$ sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
$ sudo iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 8080
$ sudo service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
У кого-нибудь есть рабочий пример, как это сделать?
Используйте следующую команду и опубликуйте сообщение об ошибке, если у вас возникнут проблемы.
Убедитесь, что публикация разрешена и открывается с помощью iptables, а затем:
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 --permanent
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --reload
Это не узнавание - постоянно. Без этого команда завершается, но не работает.
"--permanent" - для firewalld, а не для iptables. Это опечатка.
Пожалуйста, укажите ошибку после выполнения следующей cmd. Это сработало для меня
Открыть файл: vim / etc / sysconfig / iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
-ВХОД! -i lo -p tcp -m conntrack --ctstate NEW -m tcp --dport 8080 -j ПРИНЯТЬ
COMMIT
* нац
-A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-ports 80
COMMIT
iptables-save
systemctl перезапуск iptables -> REHL 7
перезапуск службы iptables -> RHEL 6
iptables -t нат -L -n
ss -tulnp
Примечания: следующие сценарии 1. (Сеть A или компьютер A) --8080 -> ВНУТРЕННИЙ -80-> (Сеть B или компьютер B)
2. (Сеть B или машина B) <- 8080-- ВНУТРЕННИЙ <-80- (Сеть A или машина A)
Попробуйте устранить неполадки извне, используя URL-адрес, потому что правила в уже добавленных вами iptables могут конфликтовать, и это очень сложная программа по сравнению с современными приложениями брандмауэра.
Используйте следующую команду в CentOS 7:
# firewall-cmd --permanent --zone=<zone-name> --add-forward-port=port=80:proto=tcp:toport=443:toaddr=<ip-address>
# firewall-cmd --reload
Измените соответственно вашу зону, порт и ip-адрес.