У меня есть сервер под управлением Ubuntu Server 20.04, который имеет два интерфейса Ethernet и размещает сервер L2TP (используя accel-ppp).
«eno1» имеет один назначенный публичный адрес IPv4.
'eno2' имеет доступ к публичному блоку IPv4 /26, который я хотел бы использовать из другого места через сервер L2TP. Подробности ниже.
Теперь я пытаюсь сделать так, чтобы мой маршрутизатор в другом месте мог подключаться к серверу L2TP и иметь публичный IPv4, а также публичный IPv4 /27, направляемый на него из разделения публичного IPv4 /26, упомянутого ранее. Например, xx161.64/27.
Хотя я могу пропинговать IP-адрес маршрутизатора, подключенного к серверу L2TP, с сервера L2TP, а также любой IPv4 /27, назначенный мной через локальную сеть маршрутизатора, я не могу понять, как получить маршрут в Интернет или за его пределы, предположительно, за пределы собственного IP-адреса шлюза сервера L2TP (xx161.122).
ено1
IP address: x.x.176.62 (public IPv4)
Subnet mask: 255.255.255.0
Gateway IP: x.x.176.254
ено2
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
Мой маршрутизатор назначил IP-адреса, которые подключаются к серверу L2TP, но в настоящее время не могут получить доступ к Интернету или выйти за пределы xx161.122 (IP-адрес шлюза сервера L2TP, как я полагаю).
x.x.161.121/30
x.x.161.64/27
На этом сервере Ubuntu у меня установлен accel-ppp и настроен как L2TP-сервер. У /etc/accel-ppp.conf
меня есть следующее:
[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
Текущий IP-маршрут:
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
Текущий маршрут:
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:
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)
Как бы мне сделать так, чтобы, например, IP-адрес маршрутизатора xx161.121 мог выйти в интернет и быть доступным из интернета? Предположительно, ему нужно было бы как-то иметь маршрут к xx161.126, IP-адресу шлюза всего исходного блока IPv4 /26.
Если есть более простой или другой подход, который мне следует использовать, пожалуйста, скажите. Я не хочу делать NAT, так как, как я полагаю, это сводит на нет то, что я пытаюсь сделать.
Надеюсь, я достаточно ясно выразился и предоставил достаточно подробностей, если вам нужны дополнительные подробности, пожалуйста, спрашивайте. Я пытаюсь разобраться в этом уже почти два дня. Игра с изменением маршрутов для меня немного в новинку. Заранее спасибо за любую помощь!
EDIT: Не похоже, что я получу здесь ответ, поэтому мне, возможно, придется поискать эксперта, который сможет нанять меня для этой задачи, если только расценки не будут смехотворно дорогими. Если кто-то прочтет этот вопрос и знает ответ, то я был бы очень благодарен услышать ваше решение! Спасибо.
решение1
После дальнейших экспериментов, я думаю, что начал понимать важность и полезность маршрутизации на основе политик, хотя и немного поздно. Хорошей новостью является то, что теперь у меня есть то, что я хочу, работающее полностью, но каким-то окольным путем.
Я использую CentOS с SoftEther VPN Server (L2TP). С этим у меня сейчас настроено 32 соединения/логина, на Firebrick у каждого из них своя таблица маршрутизации. У каждого из них также есть уникальный публичный адрес IPv4. SoftEther был единственным способом, с помощью которого мне удалось успешно получить интернет-соединение без NAT, я полагаю, потому что он создает виртуальный сетевой интерфейс (скрытый для ОС), который соединяет соединения L2TP и интерфейс Ethernet (например, eth1/eno2) на уровне Ethernet.
С помощью этого я дал указание брандмауэру Firebrick (моему маршрутизатору) с помощью десятков правил переключаться между различными таблицами маршрутизации для каждого соединения L2TP и таблицей маршрутизации, которая есть у порта моей локальной сети, и наоборот. Интерфейс локальной сети по-прежнему использует мой публичный IPv4 /26, но на самом деле он не подключен напрямую к IP-адресам, выделенным для моих соединений с сервером L2TP. Первый IP этого публичного блока IPv4 /26 на самом деле не является публичным, он используется только как IP-шлюз для моего порта локальной сети, и этот IP-адрес недоступен из Интернета. Это работает, хотя, как я уже сказал, это окольный путь. У меня все еще есть запасные IP-адреса, поэтому позже я смогу добавить больше логинов.
Это, конечно, не самое лучшее решение, оно немного некрасивое, но, похоже, работает.