![如何执行所需的路由以获取往返于我的 L2TP 服务器上分配的公共 IPv4 的客户端的互联网流量](https://linux22.com/image/191882/%E5%A6%82%E4%BD%95%E6%89%A7%E8%A1%8C%E6%89%80%E9%9C%80%E7%9A%84%E8%B7%AF%E7%94%B1%E4%BB%A5%E8%8E%B7%E5%8F%96%E5%BE%80%E8%BF%94%E4%BA%8E%E6%88%91%E7%9A%84%20L2TP%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E5%88%86%E9%85%8D%E7%9A%84%E5%85%AC%E5%85%B1%20IPv4%20%E7%9A%84%E5%AE%A2%E6%88%B7%E7%AB%AF%E7%9A%84%E4%BA%92%E8%81%94%E7%BD%91%E6%B5%81%E9%87%8F.png)
我有一台运行 Ubuntu Server 20.04 的服务器,它有两个以太网接口并托管 L2TP 服务器(使用 accel-ppp)。
“eno1”分配了一个公共 IPv4 地址。
“eno2”可以访问 /26 公共 IPv4 块,我想通过 L2TP 服务器从另一个位置使用该块。详情往下看。
现在我想做的是让我的路由器在另一个位置可以连接到 L2TP 服务器,并拥有面向公众的 IPv4 以及通过分割提到的 /26 公共 IPv4 路由到它的 /27 公共 IPv4早些时候。例如,xx161.64/27。
虽然我可以从 L2TP 服务器 ping 连接到 L2TP 服务器的路由器的 IP,以及通过路由器 LAN 分配的任何 /27 IPv4,但我不知道如何获取到互联网或其他网络的路由大概是L2TP服务器自己的网关IP(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(L2TP 服务器的网关 IP 地址 - 我相信)。
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 的路由,即整个原始 /26 IPv4 块的网关 IP 地址。
如果我应该采取更简单或不同的方法,请说出来。我不想做 NAT,因为我认为这会破坏我想做的事情。
希望我已经相当清楚并提供了足够的详细信息,如果您需要更多详细信息,请询问。近两天来我一直在努力解决这个问题。改变路线对我来说有点新鲜。预先感谢您的任何帮助!
编辑:我似乎不太希望在这里得到答案,所以我可能只需要考虑寻找一位专家来雇用这项任务,假设报价不是贵得离谱。如果有人确实读过这个问题并知道答案,那么我将非常感激听到您的解决方案!谢谢。
答案1
经过进一步的实验,我想我已经开始理解基于策略的路由的重要性和有用性,尽管有点晚了。好消息是,我现在已经得到了我想要的完全工作,但以一种迂回的方式。
我正在使用带有 SoftEther VPN 服务器 (L2TP) 的 CentOS。有了这个,我目前有 32 个连接/登录设置,在 Firebrick 上它们每个都有自己的路由表。它们每个都有一个唯一的公共 IPv4 地址。 SoftEther 是我在没有 NAT 的情况下成功获得互联网连接的唯一方法,我相信是因为它创建了一个虚拟网络接口(隐藏在操作系统中),桥接 L2TP 连接和以太网接口(例如 eth1/eno2) )在以太网级别。
这样,我通过数十条规则指示 Firebrick 的防火墙(我的路由器)在每个 L2TP 连接的各种路由表和我的 LAN 端口所具有的路由表之间跳转,反之亦然。 LAN 接口仍然使用我的公共 IPv4 /26,但实际上它并没有直接连接到分配给我的 L2TP 服务器连接的 IP 地址。该公共 IPv4 /26 块的第一个 IP 并不是真正面向公众的,它仅用作我的 LAN 端口的网关 IP,并且无法从 Internet 访问该 IP。这是可行的,尽管正如我所说,这是一种迂回的方式。我还有空闲的 IP 地址,因此稍后可以添加更多登录。
无论如何,这并不是最好的解决方案,它有点难看,但它似乎有效。