tl; dr(después de horas de depuración con @krisFR): al menos en Debian 8, nunca use interfaces virtuales (eth0:1) para OpenVPN; en su lugar, aplique los nuevos iproute2
métodos de Debian (enfoque manual) que se describen aquí:https://wiki.debian.org/NetworkConfiguration#iproute2_method. Dirigirá bien el tráfico.
Estaba intentando configurar OpenVPN en una máquina donde todo el tráfico del cliente debería enviarse a través del túnel, por lo que esto es parte de la configuración de mi servidor:
local x.x.x.243
port 443
proto udp
dev tun
server 172.31.1.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
Y mi configuración de cliente:
pull
resolv-retry infinite
mute-replay-warnings
redirect-gateway def1
script-security 1
El cliente puede conectarse a la VPN y puede hacer ping al host VPN en 172.31.1.1
, sin embargo, si intento hacer ping a google.com por dominio o IP, aparece un Request timeout for icmp_seq 0
mensaje...
¿Qué puede estar causando esto? Nota al margen: desinstalé cualquier firewall y actualmente estoy configurando IPTables para:
iptables -A INPUT -i eth0:1 -m state --state NEW -p udp --dport 443 -j ACCEPT
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -o eth0:1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0:1 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -s 172.31.1.0/24 -o eth0:1 -j MASQUERADE
iptables -A OUTPUT -o tun+ -j ACCEPT
Gracias.
Intenté hacer ping al cliente 213.30.5.46
(una de las IP de Google) y no funcionó, sin embargo obtuve estos resultados:
Escuchando en la IP VPN saliente (eth0:1):tcpdump -i eth0 -t host x.x.x.243
IP [CLIENT_IP x..].51060 > vpn.exampledomain.com.https: UDP, length 113
IP [CLIENT_IP x..].51060 > vpn.exampledomain.com.https: UDP, length 145
IP vpn.exampledomain.com.https > [CLIENT_IP x..].51060: UDP, length 81
IP [CLIENT_IP x..].51060 > vpn.exampledomain.com.https: UDP, length 145
IP [CLIENT_IP x..].51060 > vpn.exampledomain.com.https: UDP, length 145
IP [CLIENT_IP x..].51060 > vpn.exampledomain.com.https: UDP, length 145
Al mismo tiempo, escuchando en tun0, me salió esto:tcpdump -i tun0
23:40:39.864798 IP 172.31.1.10 > cache.google.com: ICMP echo request, id 17942, seq 0, length 64
23:40:40.925951 IP 172.31.1.10 > cache.google.com: ICMP echo request, id 17942, seq 256, length 64
23:40:41.886679 IP 172.31.1.10 > cache.google.com: ICMP echo request, id 17942, seq 512, length 64
23:40:42.906125 IP 172.31.1.10 > cache.google.com: ICMP echo request, id 17942, seq 768, length 64
Aquí está el resultado de iptables -L -n -v
:
Chain INPUT (policy ACCEPT 34772 packets, 2265K bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT udp -- eth0:1 * 0.0.0.0/0 0.0.0.0/0 state NEW udp dpt:443
13 1092 ACCEPT all -- tun+ * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1437 96985 ACCEPT all -- tun+ * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- tun+ eth0:1 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT all -- eth0:1 tun+ 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
Chain OUTPUT (policy ACCEPT 32574 packets, 7919K bytes)
pkts bytes target prot opt in out source destination
13 1092 ACCEPT all -- * tun+ 0.0.0.0/0 0.0.0.0/0
Nota: /proc/sys/net/ipv4/ip_forward
se establece en 1
.
Dirigido tcpdump -i eth0:1 -t host 213.30.5.46
mientras se hace ping al destino:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0:1, link-type EN10MB (Ethernet), capture size 262144 bytes
IP 172.31.1.10 > cache.google.com: ICMP echo request, id 16920, seq 0, length 64
IP 172.31.1.10 > cache.google.com: ICMP echo request, id 16920, seq 256, length 64
IP 172.31.1.10 > cache.google.com: ICMP echo request, id 16920, seq 512, length 64
IP 172.31.1.10 > cache.google.com: ICMP echo request, id 16920, seq 768, length 64
No se muestra nada en el cliente y el ping finalmente se agota.
La dirección IP utilizada por OpenVPN local x.x.x.243
se configura \etc\network\interfaces
inmediatamente eth0:1
después eth0
como:
auto eth0:1
iface eth0:1 inet static
address x.x.x.243
gateway x.x.x.129
netmask 255.255.255.128
dns-nameservers x.x.x.4 x.x.x.104
Respuesta1
Como dijiste, pasamos horas juntos para depurar esto...
Con respecto a todas las pruebas que realizamos y todos los rastros que recuperamos, finalmente parece que estábamos experimentando algunos comportamientos extraños con respecto a la interfaz virtual eth0:1
.
p.ej :http://lartc.org/howto/lartc.iproute2.html
La mayoría de las distribuciones de Linux, y la mayoría de UNIX, utilizan actualmente los venerables comandos arp, ifconfig y route. Si bien estas herramientas funcionan, muestran algún comportamiento inesperado en Linux 2.2 y versiones posteriores. Por ejemplo, los túneles GRE son una parte integral del enrutamiento hoy en día, pero requieren herramientas completamente diferentes.
Con iproute2, los túneles son una parte integral del conjunto de herramientas.
Decidimos cambiar iproute2
(al menos intentarlo) a modificar /etc/network/interfaces
el archivo para cambiar la forma de asignar múltiples IP a la eth0
interfaz.
¡Después de eso todo salió bien y funcionando!
iproute2
ejemplo :
auto eth0
allow-hotplug eth0
iface eth0 inet static
address 192.168.1.42
netmask 255.255.255.0
gateway 192.168.1.1
iface eth0 inet static
address 192.168.1.43
netmask 255.255.255.0
Más información sobre iproute2
aquí: