sed -e '
/pattern1/!b
$q; N
/\npattern2/!s/^/MODIFIED:/
P;D
' yourfile
perl -0777pe 's/(?=pattern1.*$)(?!pattern2)/MODIFIED:/gm' yourfile
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.
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
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.
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 42
y 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 42
y 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 .conf
a 6
, y luego usar journalctl -fu openvpn-server@<conf_file_name>.service
para 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_filter
a2
(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 и Неудачная попытка 2 не работают, потому что цепочка iptables запускается после решения о маршрутизации, см. диаграмму iptableshttp://inai.de/images/nf-packet-flow.png.
Кроме того, Неудачная попытка 2 используется неверный подход к установке пользователя/группы экземпляра сервера vpn. Вам нужно указать пользователя или группу в /etc/openvpn/server.conf, а не в файле модуля systemd. т.е.:
adduser vpnserver
user vpnserver
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.