Как направить весь трафик на машине через openvpn сервер, в то время как на самой машине работает openvpn сервер?

sed -e '
   /pattern1/!b
   $q; N
   /\npattern2/!s/^/MODIFIED:/
   P;D
' yourfile

perl -0777pe 's/(?=pattern1.*$)(?!pattern2)/MODIFIED:/gm' yourfile
1
14.09.2017, 23:43
2 ответа

Sobre la base de una respuesta anterior en el hilo, así es como pude resolver el problema en mi computadora Ubuntu 17.10 (ingeniosa )que ejecuta OpenVPN 2.4.3.

1 )Deshabilitar filtrado de ruta inversa

Necesitamos cambiar el reenvío de ruta inversa de unidifusión a modo flexible(rp_filter=2)en lugar de modo estricto(rp_filter=1). En modo estricto, un paquete entrante debe recibirse en la misma interfaz de red que se usaría para reenviar el paquete de retorno.

sysctl -w net.ipv4.conf.<if>.rp_filter=2

Donde <if>es la interfaz Ethernet física que usa la computadora para conectarse al enrutador. En mi caso, el comando se veía así:sysctl -w net.ipv4.conf.enp2s0.rp_filter=2. Para leer el parámetro del kernel, use sysctl net.ipv4.conf.<if>.rp_filter.

Para que el cambio sea persistente después de un reinicio, agregue o cambie esta línea en/etc/sysctl.conf:

net.ipv4.conf.<if>.rp_filter=2

2 )Configure el servidor OpenVPN para marcar paquetes cifrados

En el archivo del servidor .conf, agregue:

mark <value>

Donde <value>es un valor arbitrariamente único para marcar los paquetes. Esto permitirá redirigir los paquetes cifrados por el servidor OpenVPN. Usé mark 9.

Reinicie el servidor OpenVPN.

3 )Redirija los paquetes marcados al enrutador con una nueva regla de ip y ruta de ip

ip rule add fwmark <value> table <N>
ip route add default via <router> table <N>

Donde <N>es un número arbitrariamente único para la tabla de enrutamiento y <router>es la dirección IP del enrutador en mi LAN. En otras palabras, ejecuté estos comandos:ip rule add fwmark 9 table 42y ip route add default via 192.168.8.1 table 42.

Hacer que estos cambios sean persistentes después de reiniciar es más complicado,especialmente con Ubuntu 17.10 que usa el nuevo paquete netplan para administrar conexiones de red en lugar del archivo tradicional /etc/network/interfaces. A falta de una solución mejor, agregué una serie de comandos en el archivo de servicio systemd de OpenVPN. Esto creará la regla IP y la ruta antes de que se inicie OpenVPN:ExecStartPre=-/sbin/ip rule add fwmark 9 table 42y ExecStartPre=-/sbin/ip route add default via 192.168.8.1 table 42. Utilizo el signo menos -antes de la ruta del comando para asegurarme de que el servidor se iniciará incluso si el comando falla (en caso de que la regla o ruta ya exista ), consulte la página del manual systemd.service para más información.

Consejo:Ejecuto el servidor OpenVPN como un servicio systemd en mi computadora, la mejor manera de solucionar este problema en mi caso fue aumentar la verbosidad del servidor OpenVPN en el archivo .confa 6, y luego usar journalctl -fu openvpn-server@<conf_file_name>.servicepara ver si se pudo establecer la conexión. Si el filtrado de ruta inversa no está deshabilitado, es posible que ni siquiera vea ninguna actividad cuando los clientes intenten conectarse. Después de configurar rp_filtera2(paso 1 ), pude ver algo de actividad, pero el protocolo de enlace TLS fallaría. Una vez que logré redirigir los paquetes OpenVPN al enrutador (paso 2 -3 ), mis clientes pudieron conectarse.

1
27.01.2020, 23:44

Почему это не удается

Неудачная попытка 1 и Неудачная попытка 2 не работают, потому что цепочка iptables запускается после решения о маршрутизации, см. диаграмму iptableshttp://inai.de/images/nf-packet-flow.png.

Кроме того, Неудачная попытка 2 используется неверный подход к установке пользователя/группы экземпляра сервера vpn. Вам нужно указать пользователя или группу в /etc/openvpn/server.conf, а не в файле модуля systemd. т.е.:

  1. Создайте пользователя или группуadduser vpnserver
  2. Затем добавьте пользователя или группу в /etc/openvpn/server.conf.user vpnserver
  3. Убедитесь, что процесс сервера vpn выполняется от имени этого пользователя/группы с помощьюps -A o pid,cmd,user,group|grep vpn

Решение

Вы можете помечать пакеты локальных процессов только в том случае, если процессы установили параметр сокета . OpenVPN поддерживает это :https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage

Вы можете пометить пакет опцией --mark valueв файле /etc/openvpn/server.conf, а затем использовать ip rule add fwmark value table 42с ip routes default via WAN_GATEWAY table 42.

После этого машина C может подключиться к vpn-серверу машины B.

Альтернатива

В качестве альтернативы вы можете использовать пространства имен netns для сервера и клиента vpn, а затем использовать цепочки iptables.

0
27.01.2020, 23:44

Теги

Похожие вопросы