¿Cómo hago las rutas requeridas para obtener tráfico de Internet hacia/desde las IPv4 públicas asignadas a mi cliente en mi servidor L2TP?

¿Cómo hago las rutas requeridas para obtener tráfico de Internet hacia/desde las IPv4 públicas asignadas a mi cliente en mi servidor L2TP?

Tengo un servidor que ejecuta Ubuntu Server 20.04 que tiene dos interfaces Ethernet y aloja el servidor L2TP (usando accel-ppp).

'eno1' tiene asignada una única dirección IPv4 pública.

'eno2' tiene acceso a un bloque IPv4 público /26 que me gustaría utilizar desde otra ubicación a través de un servidor L2TP. Detalles más abajo.

Ahora lo que estoy tratando de hacer es hacer que mi enrutador, en otra ubicación, pueda conectarse al servidor L2TP y tener un IPv4 público así como un IPv4 público /27 enrutado a él desde la división del IPv4 público /26 mencionado. más temprano. Por ejemplo, xx161.64/27.

Si bien puedo hacer ping a la IP del enrutador conectado al servidor L2TP, desde el servidor L2TP, así como a cualquier /27 IPv4 que asigné a través de la LAN del enrutador, no puedo entender cómo obtener una ruta a Internet o más allá. presumiblemente la propia IP de puerta de enlace del servidor L2TP (xx161.122).

eno1

IP address:  x.x.176.62 (public IPv4)
Subnet mask: 255.255.255.0
Gateway IP:  x.x.176.254

eno2

IP address:  x.x.161.125 (public IPv4)
Subnet mask: 255.255.255.252 (split from what is actually a /26)
Gateway IP:  x.x.161.126

Mi enrutador asignó direcciones IP, que se conectan al servidor L2TP, pero actualmente no puedo acceder a Internet ni ir más allá de xx161.122 (la dirección IP de la puerta de enlace del servidor L2TP, creo).

x.x.161.121/30
x.x.161.64/27

En este servidor Ubuntu tengo accel-ppp instalado y configurado como servidor L2TP. En /etc/accel-ppp.conftengo lo siguiente:

[modules]
log_file

pptp
l2tp

auth_mschap_v2
auth_mschap_v1
auth_pap

chap-secrets

ippool

pppd_compat

[core]
log-error=/var/log/accel-ppp/core.log
thread-count=4

[common]
single-session=replace

[ppp]
verbose=1
min-mtu=1280
mtu=1400
mru=1400
ipv4=require
ipv6=deny
ipv6-intf-id=0:0:0:1
ipv6-peer-intf-id=0:0:0:2
ipv6-accept-peer-intf-id=1
lcp-echo-interval=1
lcp-echo-failure=5
lcp-echo-timeout=120
unit-cache=1

[pptp]
verbose=1
#echo-interval=30
#ip-pool=pptp
#ipv6-pool=pptp
#ipv6-pool-delegate=pptp
ifname=pptp%d

[l2tp]
verbose=1
ifname=l2tp%d

[dns]
dns1=8.8.8.8
dns2=8.8.4.4

[client-ip-range]
disable

[ip-pool]
gw-ip-address=x.x.161.122
attr=Framed-Pool
x.x.161.121/30

[log]
log-file=/var/log/accel-ppp/accel-ppp.log
log-emerg=/var/log/accel-ppp/emerg.log
log-fail-file=/var/log/accel-ppp/auth-fail.log
copy=1
level=3

[pppd-compat]
verbose=1

[chap-secrets]
chap-secrets=/etc/ppp/chap-secrets

Ruta IP actual:

default via x.x.161.126 dev eno2 proto static
default via x.x.176.254 dev eno1 proto dhcp src x.x.176.62 metric 100
x.x.176.0/24 dev eno1 proto kernel scope link src x.x.176.62
x.x.176.254 dev eno1 proto dhcp scope link src x.x.176.62 metric 100
x.x.161.64/27 via x.x.161.121 dev l2tp0
x.x.161.121 dev l2tp0 proto kernel scope link src x.x.161.122
x.x.161.124/30 dev eno2 proto kernel scope link src x.x.161.125

Ruta actual:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         x.x.161.126     0.0.0.0         UG    0      0        0 eno2
default         x.x.176.254     0.0.0.0         UG    100    0        0 eno1
x.x.176.0       0.0.0.0         255.255.255.0   U     0      0        0 eno1
x.x.176.254     0.0.0.0         255.255.255.255 UH    100    0        0 eno1
x.x.161.64      x.x.161.121     255.255.255.224 UG    0      0        0 l2tp0
x.x.161.121     0.0.0.0         255.255.255.255 UH    0      0        0 l2tp0
x.x.161.124     0.0.0.0         255.255.255.252 U     0      0        0 eno2

Ifconfig actual:

eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet x.x.176.62  netmask 255.255.255.0  broadcast x.x.176.255
        inet6 x:x:x:x::  prefixlen 56  scopeid 0x0<global>
        inet6 fe80::d250:99ff:feda:91b6  prefixlen 64  scopeid 0x20<link>
        ether d0:50:99:da:91:b6  txqueuelen 1000  (Ethernet)

eno2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet x.x.161.125  netmask 255.255.255.252  broadcast x.x.161.127
        inet6 fe80::d250:99ff:feda:91b5  prefixlen 64  scopeid 0x20<link>
        ether d0:50:99:da:91:b5  txqueuelen 1000  (Ethernet)

l2tp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1400
        inet 198.244.161.122  netmask 255.255.255.255  destination x.x.161.121
        ppp  txqueuelen 3  (Point-to-Point Protocol)

¿Cómo haría para que, por ejemplo, la dirección IP del enrutador xx161.121 pueda acceder a Internet y sea accesible desde Internet? Presumiblemente, necesitaría tener de alguna manera una ruta a xx161.126, la dirección IP de la puerta de enlace de todo el bloque /26 IPv4 original.

Si hay un enfoque más simple o diferente que debería adoptar, dígalo. No quiero hacer NAT porque imagino que eso frustra lo que estoy tratando de hacer.

Espero haber sido razonablemente claro y haber proporcionado muchos detalles; si necesita más detalles, por favor pregunte. He estado tratando de entender esto durante casi dos días. Jugar con el cambio de rutas es un poco nuevo para mí. ¡Gracias de antemano por cualquier ayuda!

EDITAR: No parece esperanzador obtener una respuesta aquí, por lo que quizás tenga que buscar un experto para contratar para esta tarea, suponiendo que las cotizaciones no sean ridículamente caras. Si alguien lee esta pregunta y sabe la respuesta, ¡estaría muy agradecido de escuchar su solución! Gracias.

Respuesta1

Después de más experimentación, creo que comencé a comprender la importancia y utilidad del enrutamiento basado en políticas, aunque un poco tarde. La buena noticia es que ahora tengo lo que quiero funcionando completamente, pero de una manera indirecta.

Estoy usando CentOS con SoftEther VPN Server (L2TP). Con esto, actualmente tengo 32 conexiones/inicios de sesión configurados, en Firebrick cada uno tiene su propia tabla de enrutamiento. Cada uno de ellos también tiene una dirección IPv4 pública única. SoftEther ha sido la única forma en la que he logrado obtener con éxito una conexión a Internet sin NAT, creo que porque crea una interfaz de red virtual (oculta al sistema operativo) que une las conexiones L2TP y la interfaz Ethernet (por ejemplo, eth1/eno2). ) a nivel de ethernet.

Con esto, le he indicado al firewall del Firebrick (mi enrutador) a través de docenas de reglas que salte entre las distintas tablas de enrutamiento para cada conexión L2TP y la tabla de enrutamiento que tiene el puerto de mi LAN, y viceversa. La interfaz LAN todavía usa mi IPv4 /26 público pero, en realidad, no está conectada directamente a las direcciones IP asignadas a las conexiones de mi servidor L2TP. La primera IP de ese bloque IPv4/26 público no es realmente pública, solo se usa como IP de puerta de enlace para mi puerto LAN y no se puede acceder a esa IP desde Internet. Esto funciona, aunque como digo es una forma indirecta de hacerlo. También tengo direcciones IP adicionales, así que puedo agregar más inicios de sesión más adelante.

No es exactamente la mejor solución de ninguna manera, es un poco fea, pero parece funcionar.

información relacionada