Necesito enrutar el tráfico a algún host en Internet a través del servidor VPN.
Configuración:
Computadora: ubuntu-12.04
eth0 - xxxx/24
tun0 - dirección inet:10.8.0.6 PtP:10.8.0.5 Máscara:255.255.255.255
Hay un servidor OpenVPN (Amazon):
ubuntu-12.04
eth0 - aaaa/24
tun0 - dirección inet:10.8.0.1 PtP:10.8.0.2 Máscara:255.255.255.255
Hay un host en la IP de Internet: qqqq
Quiero realizar tráfico a qqqq y fui al servidor OpenVPN. Para esto hago:
iptables:
Marco paquetes en la tabla mangle:
sudo iptables -t mangle -A OUTPUT -d q.q.q.q -j MARK --set-mark 2
Envío tráfico a qqqq lanza tun0:
sudo iptables -t nat -A POSTROUTING -d q.q.q.q -j SNAT --to-source 10.8.0.6
iproute2:
Hago la tabla "100" en /etc/iproute2/rt_tables
sudo ip rule add fwmark 2 table 100
sudo ip route add default via 10.8.0.5 table 100
tcpdump en la primera computadora:
14:22:04.554399 IP 10.8.0.6 > qqqq.clodo.ru: solicitud de eco ICMP, id 11717, secuencia 1, longitud 64
14:22:04.681918 IP qqqq.clodo.ru > 10.8.0.6: respuesta de eco ICMP, id 11717, secuencia 1, longitud 64
14:22:05.562577 IP 10.8.0.6 > qqqq.clodo.ru: solicitud de eco ICMP, id 11717, secuencia 2, longitud 64
14:22:05.690240 IP qqqq.clodo.ru > 10.8.0.6: respuesta de eco ICMP, id 11717, secuencia 2, longitud 64
Pero no hay ping. 2 paquetes transmitidos, 0 recibidos, 100% de pérdida de paquetes.
Respuesta1
No es necesario marcar los paquetes. Para hacer lo que está planeando, necesita lo siguiente
en el archivo de configuración del servidor agregue lo siguiente:
"push route q.q.q.q 255.255.255.255"
Lo anterior impulsará la ruta al lado del cliente para que todo el tráfico enviado desde el cliente a esa IP se envíe a través del túnel openvpn.
También en el lado del servidor necesita aceptar el tráfico entrante del cliente, puede aceptar todo el tráfico proveniente de la subred del cliente de la siguiente manera
iptables -A INPUT -s 10.8.0.0/24 -j ACCEPT
es posible que también necesites esto, no estoy seguro:
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
Necesita capturar el tráfico entrante del lado del cliente al servidor [haga esto en el lado del servidor]
iptables -t nat -A POSTROUTING -d q.q.q.q -j SNAT --to-source PUBLIC_IP_OR_YOUR_VPN_SERVER
Y no necesitas iproute2 o mangle table.
El orden de las reglas es importante, así que complazcalos antes de eliminar una regla coincidente.