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.conf
eu 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.