
Я совсем запутался и ничего не понимаю iptables
.
У меня есть сервер nginx, который слушает localhost:80
, и я хочу получить к нему доступ с помощью IP-адреса моей сетевой карты 192.168.29.167:80
. Я следовалцифровойокеанУчебное пособие по настройке правил.
мой:
тип | Интерфейс | адрес |
---|---|---|
local |
lo |
127.0.0.1 |
NIC lan |
enp7s0 |
192.168.29.167 |
Я сделал,
iptables -A FORWARD -i lo -o enp7s0 -p tcp --syn --dport 80 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -i lo -o enp7s0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i enp7s0 -o lo -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 80 -d 127.0.0.1 -j SNAT --to-desitnation 127.0.0.1
Настройка PREROUTING
правил POSTROUTING
и FORWARD
ничего не дала. Я не могу получить доступ localhost:80
через enp7s0
.
(примечание: у меня есть sudo sysctl -w net.ipv4.ip_forward=1
)
решение1
- У вас ошибка в
nat
правилах: ваши имена интерфейсов кажутся неверными. Лучше использоватьDNAT
на основе адреса назначения, а не имени входного интерфейса. Таким образом, вам нужно всего одно правило, чтобы добиться желаемого:
iptables -t nat -A PREROUTING --dst 192.168.29.167 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:80
- Эти пакеты не пересылаются (транзитируются), но будут входящим. Вы должны разрешить этот трафик в цепочке
filter/INPUT
, а не вfilter/FORWARD
. Обратите внимание, послеDNAT
действия входной интерфейс не меняется (поэтому вы должны указатьenp7s0
интерфейс, а неlo
). Но вы можете разрешить любоеDNAT
соединение с помощью одного правила.
iptables -t filter -A INPUT -m conntrack --ctstate DNAT -j ACCEPT
- Запустите ,
sysctl -w net.ipv4.conf.enp7s0.route_localnet=1
чтобы разрешить прием извне пакетов, адресованных127.0.0.1
. - Лучше использовать
iptables-save -c
команды для вывода полного набора правил со счетчиками. Вы должны увидеть увеличениеnat/PREROUTING
счетчиков правил по крайней мере. Также используйтеiptables-apply
для применения новых правил. Проверьте документацию по этим утилитам. - Используйте
tcpdump -ni enp7s0 'tcp port 80'
для устранения неполадок с трафиком извне. - Для перенаправления локального трафика вам следует использовать следующие правила:
iptables -t nat -A OUTPUT -p tcp --dport 80 --dst 192.168.29.167 -j DNAT --to 127.0.0.1
В противном случае вы не сможете подключиться к своему nginx через адрес 192.168.29.167 с самого сервера.