Работаю программистом (backend), но хочу развиваться еще и в сторону администрирования и пытаюсь более подробно разобраться с netfilter в Linux. Раньше настраивал только простые вещи вроде открыть порт на машине и все. А тут решил попробовать сделать тестовый стенд из двух виртуальных машин: шлюз и клиент. В общем, NAT делаю впервые (сижу два вечера, несколько раз переделывал, но все кажется что я что-то не так делаю, хоть и работает).
Могли бы вы опытным взглядом посмотреть на мои правила iptables и подсказать что лишнее или чего не хватает?
На шлюзе внешний интерфейс
enp0s3 с IP
192.168.88.27
Локальная сетка
10.0.1.0/24
Интерфейс шлюза который смотрит в локалку:
enp0s8 с IP
10.0.1.1
IP локальной машины которую нужно занатить и пробросить порты -
10.0.1.2
Хочу пробросить внешний порт
192.168.88.27:8080 на локальную машину
10.0.1.2:80
В таблице
filter
у всех цепочек политика
DROP
enp0s3 - inet, enp0s8 - local
INPUT:
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -i lo -j ACCEPT
-A INPUT -i enp0s8 -j ACCEPT
FORWARD:
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 10.0.1.2/32 -p tcp -m conntrack --ctstate NEW -m tcp --dport 80 -j ACCEPT
-A FORWARD -i enp0s8 -o enp0s3 -j ACCEPT
-A FORWARD -i enp0s8 -o lo -j ACCEPT
OUTPUT:
-A OUTPUT -o enp0s3 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o enp0s8 -j ACCEPT
Таблица
nat
(у всех политика
ACCEPT
)
PREROUTING:
-A PREROUTING -d 192.168.88.27/32 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 10.0.1.2:80
OUTPUT:
-A OUTPUT -d 192.168.88.27/32 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 10.0.1.2:80
POSTROUTING:
-A POSTROUTING -o enp0s3 -j SNAT --to-source 192.168.88.27
-A POSTROUTING -s 10.0.1.0/24 -d 10.0.1.2/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 10.0.1.1
# Либо только:
# -A POSTROUTING -s 10.0.1.0/24 -j MASQUERADE
У меня есть несколько сомнений. Если нужно пробросить порт, и чтобы с компьютеров в локальной сети можно было обращаться по внешнему IP:PORT шлюза на хост из этой сети и все корректно работало, то получается я добавил аж 4 правила:
# filter
-A FORWARD -d 10.0.1.2/32 -p tcp -m conntrack --ctstate NEW -m tcp --dport 80 -j ACCEPT
# nat
-A PREROUTING -d 192.168.88.27/32 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 10.0.1.2:80
-A OUTPUT -d 192.168.88.27/32 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 10.0.1.2:80
-A POSTROUTING -s 10.0.1.0/24 -d 10.0.1.2/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 10.0.1.1
Так ли нужно делать или что-то убрать/добавить/исправить? И кроме ната - может что-то убрать лишнее или добавить обязательно нужно?
Я читал
эту хорошую вики, но чисто как там сделать у меня не получалось - то инета нет на локальной машине, то порт не пробрасывается
Заранее спасибо!