Маршрутизация NAT в CentOS 7 и IPTABLES

Маршрутизация NAT в CentOS 7 и IPTABLES

У меня есть экземпляр CentOS как NAT для моей локальной сети. В моей локальной сети есть несколько подсетей. Внутри одной из них есть сервер PPTP VPN. Мне нужно опубликовать этот сервер в Интернете.

Итак. Моя проблема в том, что трафик не переходит из nat/PREROUTINGцепочки в filter/FORWARDцепочку.

  • 1.1.1.1мой внешний IP
  • 192.168.10.1мой внутренний IP
  • 10.0.1.1это IP VPN-сервера
  • eth0внешний интерфейс
  • eth1внутренний интерфейс

Правила NAT(работает PKTSи BYTESменяется)

-A PREROUTING -d 1.1.1.1/32 -i eth0 -p tcp -m tcp --dport 1723 -j DNAT --to-destination 10.0.1.1
-A PREROUTING -d 1.1.1.1/32 -i eth0 -p gre -j DNAT --to-destination 10.0.1.1

Правила ФИЛЬТРА(не работает PKTSи BYTESне меняется)

-A FORWARD -d 10.0.1.1/32 -i eth0 -o eth1 -p tcp -m tcp --dport 1723 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.0.1.1/32 -i eth1 -o eth0 -p tcp -m tcp --sport 1723 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 10.0.1.1/32 -i eth0 -o eth1 -p gre -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.0.1.1/32 -i eth1 -o eth0 -p gre -m state --state RELATED,ESTABLISHED -j ACCEPT

Конечно, net.ipv4.ip_forward = 1и я могу пинговать 10.0.1.1с NAT-сервера.

На порту tcpdump1723 показаны действия только на внешнем интерфейсе.

Понятия не имею.

UPD1. Я проверил маршрутизацию с помощью ip route get 10.0.1.1 from <src> iif eth0и получил RTNETLINK answers: Invalid argument. Кстати, я получил какой-то ответ, затем использовал любое iifимя ( eth0, eth1, eth2). Я получил действительный маршрут только тогда не использовал iifаргумент.

UPD2. Я добавил -A FORWARD -d 10.0.1.1/32 -j ACCEPTправило в filter/FORWARDцепочку первым. Но ничего. Пакеты и байты были нулевыми.

решение1

  • Другие правила очень важны. И порядок правил тоже. Поэтому проверьте вывод команды iptables-save -c. Исследуйте правила выше тех, которые вы создали.

  • Между цепочками nat/PREROUTINGи filter/FORWARDпринимается решение о маршрутизации. Проверьте маршрутизацию с помощью ip route get 10.0.1.1 from <src> iif eth0. Он должен вернуть действительный маршрут. Если это что-то другое, вставьте это в вопрос.

  • Также изучите вывод команды nstat -az.

  • Для пропуска pptp через NAT необходимо загрузить модули для conntrack:

    • nf_conntrack_proto_gre
    • nf_nat_proto_gre
    • nf_conntrack_pptp
    • nf_nat_pptp
  • В последних ядрах вы должны явно включить conntrack helpers, особенно для pptp. Поэтому вам нужно добавить дополнительное правило.

iptables -t raw -A PREROUTING -p tcp -m tcp --dport 1723 -j CT --helper pptp
  • Другой способ включить помощника — команда sysctl:
sysctl -w net.netfilter.nf_conntrack_helper=1
  • Другие инструменты для устранения вашей проблемы:
    • conntrack -E- мониторинг событий conntrack
    • tcpdump
    • -j NFLOGи tcpdump -ni nflog- разрешить перехват пакетов из правила iptables.
    • -j TRACEцель - вы можете исследовать путь пакетов через правила брандмауэра.

ПСОбновите вопрос, если вы все еще не можете ответить.

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