Como configurar o iptables para uma VPN dial-up com o OpenVPN e duas interfaces?

2

Eu tenho uma instância do AWS EC2, executando o Amazon Linux, que tem duas ENIs (Elastic Network Interfaces) conectadas: eth0 e eth1. Estou me conectando ao IP público na eth0. Tudo funciona muito bem, exceto pelo fato de eu querer direcionar o tráfego não criptografado para fora da eth1. Ou seja, o cliente se conecta à eth0 para configurar um túnel VPN criptografado, em seguida, seu tráfego de Internet não criptografado é roteado para dentro / fora da eth1 e de volta para o túnel na eth0.

Eu não sei o suficiente sobre o iptables para fazer essa configuração funcionar, apesar de tentar por várias horas. Eu estou esperando que isso seja simples?

Instalei a versão mais recente do OpenVPN a partir do código-fonte e fiz o seguinte:

  1. Verificação de origem / destino desativada nas interfaces
  2. Adicionado o seguinte para "rc.local": echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
  3. Adicionados os seguintes comandos iptables: %código%

Meu arquivo de configuração do servidor é assim:

port 443
proto tcp-server
dev tun
tls-server
server 10.18.14.0 255.255.255.0

ca /etc/openvpn/pki/ca.crt
cert /etc/openvpn/pki/vpnserver.crt
key /etc/openvpn/pki/vpnserver.key
dh /etc/openvpn/pki/dh.pem

ifconfig-pool-persist ipp2.txt 
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

keepalive 5 15
comp-lzo
max-clients 5
persist-key
persist-tun
status openvpn-status.log
log-append  /var/log/openvpn_road.log
verb 6 
mute 20

tun-mtu 1500
auth SHA1
keysize 128
cipher BF-CBC
    
por jamieb 07.11.2018 / 17:33

1 resposta

2

Você precisa configurar o roteamento, suas regras parecem ok, mas você precisa alterar a regra MASQ.

iptables -t nat -A POSTROUTING -s 10.18.14.0/24 -o eth1 -j MASQUERADE

Eu também sugeriria algumas regras mais simples para seus pacotes de origem.

# Allows packets from connections initiated by the box or already established
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

Agora, quanto ao roteamento, eu suponho que você queira que os clientes do OpenVPN saiam via eth1 e não o próprio servidor que presumo ter sua rota padrão via eth0. Precisamos criar uma nova tabela de roteamento para seus clientes OpenVPN, nós a chamaremos ovpn-inet.

Edite /etc/iproute2/rt_tables , insira o seguinte no final e salve.

1 ovpn-inet

Em seguida, crie /etc/sysconfig/network-scripts/route-eth1 com o seguinte conteúdo, substituindo <gw on eth1> e outros atributos em <> .

default via <gw for eth1> dev eth1 table ovpn-inet
<local network on eth1> dev eth1 src <eth1 ip adress> table ovpn-inet

Agora crie /etc/sysconfig/network-scripts/rule-eth1

from <ip address of eth1>/32 table ovpn-inet
from 10.18.14.0/24 table ovpn-inet
to <ip address of eth1>/32 table ovpn-inet

Uma sugestão seria também mudar o OpenVPN para UDP por causa do desempenho. Isso também permitiria a execução de um servidor HTTPS, se você precisar dele no TCP. Considere também usar um tls-crypt em sua configuração do servidor OpenVPN como uma maneira simples de fazer um pouco de endurecimento na sua instalação.

proto udp4

Agora reinicie sua rede para fazer as alterações em vigor.

/etc/init.d/network restart
    
por 18.11.2018 / 00:41