Исходные данные:
1) сервер Debian jessie в качестве шлюза, у которого 3 сетевых интерфейса - один смотрит наружу (eth0), другой в локалку (eth1), третий (tun0) openvpn-сервер
2) первый сервер NGINX в локальной сети (192.168.0.100), имеет один интерфейс с открытыми портами 80 и 443
3) клиенты openvpn, которые подключаются к шлюзу и имеют доступ к локальной сети
4) второй сервер NGINX в локальной сети (192.168.0.50), имеет один интерфейс с открытым портом 80
На шлюзе установлен форвардинг портов 80 и 443 на первый NGINX-сервер для того, чтобы внешние подключения к шлюзу по данным порта редиректили на первый nginx-сервер в локальной сети.
Задача:
1) необходимо чтобы все клиенты openvpn, подключаемые к шлюзу имели доступ ко второму серверу nginx на 80-ый порт
2) необходимо чтобы часть клиентов openvpn имела возможность пропускать весь свой трафик через шлюз, а часть могла иметь доступ только к внутренней локальной сети без возможности использовать шлюз для доступа к интернет
Поскольку на шлюзе включен форвардинг 80 и 443 портов на локальный сервер, то весь http-трафик openvpn-клиентов так же уходит на него
Вот правила firewall-cmd
internal (active)
interfaces: eth1
sources:
services: dhcpv6-client dns http https mdns samba-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
public (default, active)
interfaces: eth0
sources:
services: openvpn ssh
ports: 1194/tcp 443/tcp 80/tcp
masquerade: yes
forward-ports: port=443:proto=tcp:toport=443:toaddr=192.168.0.100
port=80:proto=tcp:toport=80:toaddr=192.168.0.100
icmp-blocks:
rich rules:
trusted (active)
interfaces: lo tun0
sources:
services:
ports:
masquerade: yes
forward-ports:
icmp-blocks:
rich rules:
Пробовал убрать форвардинг и добавлять правила
firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 -i eth0 -o eth1 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.100:80
firewall-cmd -—permanent --direct --add-rule ipv4 nat POSTROUTING 0 -o eth1 -p tcp -s 192.168.0.0/24 -d 192.168.0.100 --dport 80 -j SNAT --to-source 192.168.0.1:80
firewall-cmd -—permanent --direct --permanent --add-rule ipv4 filter FORWARD 0 -i eth0 -o eth1 -d 192.168.0.100 -p tcp --dport 80 -j ACCEPT
не помогло - без форвардинга не работает редирект внешних подключений на первый NGINX сервер.
Убираю forward-ports и у клиентов openvpn все работает.
Вот пример запроса с openvpn-клиента при включенном форвардинге
curl -I 192.168.0.50
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Tue, 20 Jun 2017 09:34:59 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Keep-Alive: timeout=70
Location: https://example.com/
где example.com - это DNS-адрес сервера в локальной сети
А вот запрос с того же openvpn-клиента при отключенном форвардинге
curl -I 192.168.0.50
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 20 Jun 2017 09:29:43 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Last-Modified: Tue, 20 Jun 2017 09:29:43 GMT
X-Frame-Options: SAMEORIGIN
Set-Cookie: PHPSESSID=rft076rvb7d0a8fbou76ul5dqegvgitu; path=/; HttpOnly
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
X-Frame-Options: SAMEORIGIN