Я очень запутался и совершенно не понимаю iptables
.
У меня есть сервер nginx, который прослушивает localhost: 80
и Я хочу получить к нему доступ с ip моего сетевого адаптера 192.168.29.167:80
. Я следил за руководством digitalocean по настройке правил.
my:
type | Interface | address |
---|---|---|
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
)
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 с самого сервера.