Como faço as rotas necessárias para obter tráfego de Internet de/para meu cliente atribuído IPv4s públicos em meu servidor L2TP

Como faço as rotas necessárias para obter tráfego de Internet de/para meu cliente atribuído IPv4s públicos em meu servidor L2TP

Eu tenho um servidor executando o Ubuntu Server 20.04 que possui duas interfaces Ethernet e hospeda o servidor L2TP (usando accel-ppp).

'eno1' possui um único endereço IPv4 público atribuído.

'eno2' tem acesso a um bloco IPv4 público /26 que gostaria de usar de outro local por meio de um servidor L2TP. Detalhes mais abaixo.

Agora, o que estou tentando fazer é fazer com que meu roteador, em outro local, possa se conectar ao servidor L2TP e ter um IPv4 público, bem como um IPv4 público /27 roteado para ele, dividindo o IPv4 público /26 mencionado mais cedo. Por exemplo, xx161.64/27.

Embora eu possa executar ping no IP do roteador conectado ao servidor L2TP, no servidor L2TP, bem como em qualquer /27 IPv4 atribuído por meio da LAN do roteador, não consigo descobrir como obter uma rota para a Internet ou além presumivelmente o IP do gateway do próprio 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

Meu roteador atribuiu endereços IP, que estão se conectando ao servidor L2TP, mas atualmente não conseguem acessar a Internet ou ir além de xx161.122 (o endereço IP do gateway do servidor L2TP - eu acredito), ao que parece.

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

Neste servidor Ubuntu tenho o accel-ppp instalado e configurado como um servidor L2TP. Em /etc/accel-ppp.confeu tenho o seguinte:

[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

Rota IP atual:

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

Rota atual:

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 atual:

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)

Como eu faria para que, por exemplo, o endereço IP do roteador xx161.121 pudesse acessar a Internet e ser acessível pela Internet? Presumivelmente, seria necessário de alguma forma ter uma rota para xx161.126, o endereço IP do gateway de todo o bloco /26 IPv4 original.

Se houver uma abordagem mais simples ou diferente que eu deveria adotar, por favor, diga. Não quero fazer NAT, pois imagino que isso anula o que estou tentando fazer.

Espero ter sido razoavelmente claro e fornecido muitos detalhes. Se precisar de mais detalhes, pergunte. Estou tentando entender isso há quase dois dias. Brincar com a mudança de rotas é uma novidade para mim. Agradecemos antecipadamente por qualquer ajuda!

EDITAR: Não parece esperançoso obter uma resposta aqui, então talvez eu precise procurar um especialista para contratar para essa tarefa, presumindo que as cotações não sejam ridiculamente caras. Se alguém ler esta pergunta e souber a resposta, ficaria muito grato em ouvir sua solução! Obrigado.

Responder1

Depois de mais experiências, acho que comecei a compreender a importância e a utilidade do roteamento baseado em políticas, embora um pouco tarde. A boa notícia é que agora tenho o que quero funcionando totalmente, mas de uma forma indireta.

Estou usando CentOS com servidor VPN SoftEther (L2TP). Com isso atualmente tenho 32 conexões/logins configurados, no Firebrick cada uma tem sua própria tabela de roteamento. Cada um deles também possui um endereço IPv4 público exclusivo. SoftEther tem sido a única maneira de conseguir uma conexão de internet sem NAT, acredito que porque ele cria uma interface de rede virtual (oculta no sistema operacional) que faz a ponte entre as conexões L2TP e a interface Ethernet (por exemplo, eth1/eno2 ) em nível Ethernet.

Com isso, instruí o firewall do Firebrick (meu roteador) através de dezenas de regras para pular entre as diversas tabelas de roteamento para cada conexão L2TP e a tabela de roteamento que a porta da minha LAN possui, e vice-versa. A interface LAN ainda usa meu IPv4/26 público, mas realisticamente não está diretamente conectada aos endereços IP alocados para minhas conexões de servidor L2TP. O primeiro IP desse bloco IPv4/26 público não é realmente voltado para o público, é usado apenas como um IP de gateway para minha porta LAN e esse IP não é acessível pela Internet. Isso funciona, embora, como eu disse, seja uma maneira indireta de fazer isso. Ainda tenho endereços IP extras, então posso adicionar mais logins mais tarde.

Não é exatamente a melhor solução, é um pouco feio, mas parece funcionar.

informação relacionada