iptable regra para rotear somente o tráfego de saída através de VPN

0

Eu tenho um servidor em myserver.com e quero que as pessoas na Internet consigam acessar esse servidor usando seu nome, mas quero que todo o tráfego de saída que não seja uma resposta direta ao tráfego de entrada passe pela VPN . Por exemplo, o servidor tem transmissão instalada e eu quero que a transmissão sempre passe pela VPN, mas se alguém acessar uma página da Web no servidor, o servidor não deve tentar responder pela VPN, porque obviamente isso não faria sentido. Eu configurei isso uma vez vários anos atrás usando algumas regras e rotas iptable combinadas. Lembro-me de que eram apenas algumas linhas, mas não posso, para minha vida, lembrar-me das regras exatas. Eu tentei várias variações das regras vistas abaixo (encontrado aqui e aqui ), mas sem sucesso.

sudo iptables -t mangle -A OUTPUT -p tcp -m multiport --sports 80,443,22 -j MARK --set-mark 10
sudo ip route add table 100 default via 192.168.1.1
sudo ip rule add fwmark 10 table 100
sudo ip route flush cache

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT
    
por ubiquibacon 31.12.2017 / 07:57

1 resposta

0

Descobri isso com base em informações que encontrei aqui . Para completar, vou repetir o que foi dito lá:

Este é um problema clássico. Quando você conecta seu servidor usando seu endereço IP público, os pacotes de retorno são roteados pela VPN. Você precisa forçar esses pacotes a serem roteados pela interface pública Ethernet. Esses comandos de regra / rota devem funcionar:

ip rule add from x.x.x.x table 128
ip route add table 128 to y.y.y.y/y dev ethX
ip route add table 128 default via z.z.z.z

Onde x.x.x.x é o IP público do seu servidor, y.y.y.y/y é a sub-rede do endereço IP público do seu servidor, ethX é a interface pública do servidor e z.z.z.z é o seu gateway padrão. Por exemplo:

ip rule add from 172.16.9.132 table 128
ip route add table 128 to 172.16.9.0/24 dev eth0
ip route add table 128 default via 172.16.9.1

É importante observar que o exemplo acima faz uso do IP público do servidor, mas como estou atrás de um roteador e todas as conexões para o servidor estão sendo encaminhadas pelo roteador, posso usar o IP local do servidor como visto no exemplo abaixo:

ip rule add from 192.168.1.10 table 128
ip route add table 128 to 192.168.1.0/24 dev eth0
ip route add table 128 default via 192.168.1.1

É provável que você deseje que essas regras persistam após uma reinicialização. Existem várias maneiras de fazer isso, uma delas é adicionar as regras ao seu arquivo etc/network/interfaces na interface apropriada, conforme mostrado abaixo:

# Only packets related to connections initiated by this machine should go
# through the VPN.  All other packets should be routed around the VPN.  This
# allows this  machine to be accessed via its public IP, but prevents its
# public IP from being exposed by services like transmission.

up ip rule add from 192.168.1.5 table 128
up ip route add table 128 to 192.168.1.0/24 dev enp4s0
up ip route add table 128 default via 192.168.1.1

down ip route del table 128 default via 192.168.1.1
down ip route del table 128 to 192.168.1.0/24 dev enp4s0
down ip rule del from 192.168.1.5 table 128
    
por ubiquibacon 31.12.2017 / 21:47