Rota ipsec para openvpn com iptables

1

Eu não sou um usuário muito experiente, mas tenho determinação, depois de uma semana sem progres está ficando difícil.

Eu tenho duas placas de rede, uma voltada para a internet e outra para a rede interna. Ambos os computadores da rede interna e roadwarriors da Internet se conectam com o ipsec e acessam os recursos do servidor. Os clientes devem poder navegar na internet enquanto estiverem conectados com o ipsec. Todo o tráfego da Internet deve ser roteado através do túnel openvpn.

-----------------------------|          SERVER         |-----------------------------
-----------------------------|192.168.1.1   192.168.2.1|-----------------------------
-------------{INTERNET}======{eth0                 eth1}==<ROUTER>==<INTERNAL NETWORK>
-----------------------------|    \               /    |-----------------------------
-----------------------------|    {openvpn---tun0}     |-----------------------------
-----------------------------|                  /      |-----------------------------
<ROADWARRIOR>==>{INTERNET}==>{eth0--------------       |-----------------------------
-----------------------------|192.168.1.1              |-----------------------------

O IPSec funciona e eu posso conectar ao servidor. O OpenVPN também funciona. É o encaminhamento que é o maior problema. Como faço para rotear todo o tráfego destinado à internet através do túnel openVPN? Eu tenho as seguintes regras iptables, mas eles não funcionam. O que estou perdendo?

iptables -P INPUT   DROP
iptables -P OUTPUT  DROP 
iptables -P FORWARD DROP

iptables -A INPUT -i tun0 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -m conntrack --ctstate ESTABLISHED --dport 1194 -j ACCEPT

iptables -A OUTPUT -o tun0 -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp -m conntrack --ctstate NEW,ESTABLISHED --dport 1194 -j ACCEPT

# allow IPSec INPUT on the EXTERNAL interface
iptables -A INPUT -p udp -d 192.168.1.1 -s 0.0.0.0/0 --dport 500 -j ACCEPT
iptables -A INPUT -p udp -d 192.168.1.1 -s 0.0.0.0/0 --dport 4500 -j ACCEPT
iptables -A INPUT -p esp -d 192.168.1.1 -s 0.0.0.0/0 -j ACCEPT

# allow IPSEC OUTPUT on the EXTERNAL interface
iptables -A OUTPUT -p udp -d 0.0.0.0/0 -s 192.168.1.1 --sport 500 -j ACCEPT
iptables -A OUTPUT -p udp -d 0.0.0.0/0 -s 192.168.1.1 --sport 4500 -j ACCEPT
iptables -A OUTPUT -p esp -d 0.0.0.0/0 -s 192.168.1.1 -j ACCEPT

# allow IPSec INPUT on the INTERNAL interface
iptables -A INPUT -p udp -d 192.168.2.1 -s 0.0.0.0/0 --dport 500 -j ACCEPT
iptables -A INPUT -p udp -d 192.168.2.1 -s 0.0.0.0/0 --dport 4500 -j ACCEPT
iptables -A INPUT -p esp -d 192.168.2.1 -s 0.0.0.0/0 -j ACCEPT

# allow IPSec OUTPUT on the INTERNAL interface
iptables -A OUTPUT -p udp -d 0.0.0.0 -s 192.168.2.1 --sport 500 -j ACCEPT
iptables -A OUTPUT -p udp -d 0.0.0.0 -s 192.168.2.1 --sport 4500 -j ACCEPT

EDIT: Eu já tinha habilitado o ip_forward e infelizmente as regras que você sugeriu não me ajudaram, estou com medo. Ainda não consigo acessar a internet. Estou faltando alguma coisa?

    
por user351806 28.04.2016 / 00:32

1 resposta

0

Você precisa configurar uma regra MASQUERADE para o tráfego da interface do OpenVPN para a Internet. Além disso, você ativou ip_forward ?

iptables -t nat -A PREROUTING -i tun0 -j MARK --set 0x029a
iptables -A FORWARD -i tun0 -m mark --mark 0x29a -j ACCEPT
iptables -t nat -A POSTROUTING -o eth1 -m mark --mark 0x29a -j MASQUERADE

Basicamente, suas regras atuais estão descartando todo o tráfego de encaminhamento proveniente de tun0 .

Para ativar o ip_forward, você precisa definir esse valor em /etc/sysctl.conf :

net.ipv4.ip_forward = 1

Esse valor funcionará na reinicialização, mas você também pode alterá-lo imediatamente:

echo 1 > /proc/sys/net/ipv4/ip_forward

Isso deve funcionar.

    
por 28.04.2016 / 04:30