KolyaniuS
@KolyaniuS
безнадежный оптимист

Как реализовать форвардинг портов в firewalld?

Исходные данные:
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
  • Вопрос задан
  • 1001 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы