Como faço para rotear somente o tráfego de saída através de um cliente openvpn?

0

Eu quero rotear todo o tráfego de computer_X sobre o cliente vpn, exceto o tráfego de saída (Eu também posso instalar um servidor vpn no cliente, se isso torna mais fácil).

Conexões de entrada, como solicitações para meu servidor: 80 ou: 443 ou ssh: 22, ainda serão roteadas por padrão através da minha interface WAN, mas conexões de saída, como: 80 solicitações do meu computer_X devem ser roteadas sobre o cliente vpn.

Eu adicionei uma regra para sempre usar o WAN_GATEWAY como rota padrão para pacotes originados do meu WAN_INTERFACE . Veja:

# ip route show table 42
default via WAN_GATEWAY dev eth0 

# ip rule list
0:      from all lookup local 
32765:  from WAN_IP lookup 42
32766:  from all lookup main 
32767:  from all lookup default 

# ip r
default via WAN_GATEWAY dev eth0 onlink 
10.8.0.0/24 via 10.8.0.2 dev tun0 
10.8.0.2 dev tun0  proto kernel  scope link  src 10.8.0.1 
WAN_SUBNET/26 via WAN_GATEWAY dev eth0 
WAN_SUBNET/26 dev eth0  proto kernel  scope link  src WAN_IP 

# ip a
eth0: inet WAN_IP ...
tun0: inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0

Agora eu quero rotear todo o tráfego de saída através do meu tun0 dispositivo, mas não posso apenas ip route add default via 10.8.0.1 , porque você não pode rotear um túnel sobre si mesmo?

Mas talvez eu ainda possa fazer uma rota padrão com

ip route default via 10.8.0.1

mas adicionalmente criar uma rota específica para as conexões vpn assim?

ip route add table 32 default via WAN_IP
ip rule add from 10.8.0.0/8 table 32

Eu esperava que isso impedisse que a VPN não fosse roteada por si mesma.

Ou eu tenho que adicionar todas as rotas para todas as sub-redes, exceto a 10.8.0.0/8 manualmente (para ter certeza de que o túnel não está se tunelando)?

ip route add 128.0.0.0/1  via 10.8.0.1
ip route add 64.0.0.0/2 via 10.8.0.1
ip route add 32.0.0.0/3 via 10.8.0.1
ip route add 16.0.0.0/4 via 10.8.0.1
ip route add 12.0.0.0/6 via 10.8.0.1
ip route add 11.0.0.0/7 via 10.8.0.1
ip route add 9.0.0.0/8 via 10.8.0.1
    
por fremon 09.09.2017 / 21:44

1 resposta

2

Por padrão, o OpenVPN adiciona a rota ao servidor OpenVPN na tabela de roteamento padrão. A decisão de roteamento é feita pela regra mais correspondente, se nenhuma regra for correspondida, o gateway padrão será usado. Como existe uma regra mais precisa para o servidor OpenVPN, ele é usado no lugar da rota padrão.

Você deve ter sua configuração padrão encaminhando todo o tráfego via OpenVPN e depois configurar as exceções para seus casos especiais.

Você pode configurar um namespace de rede separado com sua própria configuração de roteamento e executar os serviços lá. Isso possivelmente requer que você atribua um endereço IP separado para o seu namespace e / ou use uma configuração NAT entre seus namespaces.

A alternativa para namespaces de rede separados é usar o roteamento de políticas com a marcação de pacotes .

Use iptables para marcar pacotes com 10 das portas de origem 80 , 443 e 22 :

iptables -t mangle -A OUTPUT -p tcp -m multiport --sports 80,443,22 -j MARK --set-mark 10

Configure as tabelas de roteamento. Use a configuração OpenVPN para a tabela de roteamento padrão (todo o tráfego via túnel OpenVPN, exceto o próprio túnel). Tenha uma tabela de roteamento separada para o tráfego marcado.

# add new routing table 100 and set its default routing to your default gw
ip route add table 100 default via $DEFAULT_GW

# add rule to use the new table for packets marked 10
ip rule add fwmark 10 table 100

# flush routing cache
ip route flush cache
    
por 09.09.2017 / 22:15