Re: Проброс https на порт, отличный от 443

oradba25 nginx-forum на forum.nginx.org
Вт Окт 31 00:36:06 UTC 2017


Добрый день

Вообще-то все описано
https://www.nginx.com/blog/ip-transparency-direct-server-return-nginx-plus-transparent-proxy

У меня для Linux нарисована такая инструкция, может есть какие-то
неточности:

-- NGINX должен осуществлять привязку к локальному сокету любого адреса
(внешнего адреса клиента), поэтому он должен работать с правами root (что
есть весьма несекурно, тем более что он торчит наружу):

user root
...
server {
...
proxy_bind $remote_addr transparent;
...
}

-- Маршрутизировать все требуемые пакеты внутри себя (не выпускать наружу).
Правила сохранены в /etc/sysconfig/iptables, маршрутизация в route-eth0,
rule-eth0 каталога /etc/sysconfig/network-scripts. (Чтоб правила
подхватились в CentOS 7 надо запретить NetworkManager.service,
Firewall.service и разрешить network.service, iptables.service, либо
научиться настраивать Firewall.service):

iptables -t mangle -N DIVERT                                   # Новая
цепочка
iptables -t mangle -A DIVERT -j MARK --set-mark 0x1/0xffffffff # Просто
маркируем пакет
iptables -t mangle -A DIVERT -j ACCEPT                         # И
пропускаем

iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT    # Все пакеты
для уже открытых сокетов отправляются в DIVERT, где просто помечаются
iptables -t mangle -A PREROUTING -p tcp -m multiport --sport
443,10443,8080,8081 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 0
                                                               # Все ответы
от серверов помечаем и пробрасываем на localhost:0

ip rule add fwmark 1 lookup 100                                # Все
маркированные пакеты обрабатываем таблицей маршрутизации 100

ip route add local 0.0.0.0/0 dev lo table 100                  # Где просто
обрабатываем их локально
ip route flush cache

-- На проксируемых (upstream) серверах возвращать ответы на NGINX,
независимо от адреса назначения (Default route to NGINX). Для этого можно
поднять фиктивный интерфейс, куда и ходит именно NGINX в той же подсети.
HTTP-сервер должен слушать этот адрес. Это прописывается в файлах
ifcfg-eth0:0, route-eth0:0, rule-eth0:0 каталога
/etc/sysconfig/network-scripts:

ip addr add IP_адрес_интерфейса/27 brd broadcast_интерфейса dev eth0 label
eth0:0                   # Адрес куда ходит NGINX
ip rule from IP_адрес_интерфейса table 100                                  
                 # Все пакеты с этого адреса обрабатываются таблицей
маршрутизации 100
ip route IP_адрес_интерфейса dev eth0  proto kernel  scope link  src
IP_адрес_интерфейса table 100 # Где прописан сам этот адрес
ip route default via IP_адрес_сервера_NGINX dev eth0 table 100              
                    # И дефолтовый маршрут на NGINX
ip route flush cache

Posted at Nginx Forum: https://forum.nginx.org/read.php?21,276241,277142#msg-277142



Подробная информация о списке рассылки nginx-ru