如何通过备用网关将流量从私有 LAN 路由到特定的公共远程主机?

如何通过备用网关将流量从私有 LAN 路由到特定的公共远程主机?

概述

我正在尝试处理以下情况:

+------+                 (Internet)  50.a.b.c +---------+
| edge + eth0 <-----------------------------> + outpost |
+--+---+  25.u.v.w       (Secured by IPSec)   +---------+
   | enp                                      ^
   |  10.0.0.1                                |
   |                                          |
   | enp                                      |
   |  10.0.0.2                                |
+--+---+                                      |
| node + eth0 <----- XXX (FORBIDDEN) XXX -----+
+------+  160.r.s.t

接口上有一个edge具有公网IP的主机,接口上有一个LAN内的私有IP 。25.u.v.weth010.0.0.110.0.0.0/24enp

node同样,在同一个 LAN 中,有一台主机在该 LAN上10.0.0.0/24具有不同的公网 IP 。160.r.s.teth010.0.0.2

edgeedge在和之间维护 IPSec 安全链接outpost

outpost只能通过公共 IP 访问50.a.b.coutpost 绝不能通过互联网访问,仅确保来自 IPSec 连接edge(iptables 开启outpost约束)。

node不是网络中的单个节点,网络中有多个节点。为了简单起见,我只描述了一个节点(应该对所有节点都一样)。

所有主机均运行 Ubuntu 22.04。

任务

我如何确保通过 通过然后通过路由其数据包来node进行访问?outpostedgeenpoutposteth0

关于edge

路由表edge

以下有评论

# ip r
default via 172.16.1.1 dev eth0 proto dhcp src 25.u.v.w metric 100
# Default route intended for unspecific internet access. 172.16.1.1 seems to be the VM bridge of the cloud service provider.
10.0.0.0/16 via 10.0.0.254 dev enp
# access to LAN via gateway
10.0.0.254 dev enp scope link
# no idea why this is needed
172.16.1.1 dev eth0 proto dhcp scope link src 25.u.v.w metric 100
# Seems to define the next hop to the VM bridge gateway

接口edge

仅显示相关条目:

# ip a
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 25.u.v.w/32 metric 100 scope global dynamic eth0
       valid_lft 57218sec preferred_lft 57218sec
    inet6 e:f:g:h::1/64 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::9400:2ff:fea1:8068/64 scope link
       valid_lft forever preferred_lft forever
3: enp: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc fq_codel state UP group default qlen 1000
    link/ether yy:yy:yy:yy:yy:yy brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.1/32 brd 10.0.0.1 scope global dynamic enp
       valid_lft 86280sec preferred_lft 86280sec
    inet6 fe80::8400:ff:fe61:cc98/64 scope link
       valid_lft forever preferred_lft forever

关于node

原始路由表node

更改尝试前的路由表

# ip r
default via 172.16.1.1 dev eth0 proto dhcp src 160.r.s.t metric 100
# Default route intended for unspecific internet access. 172.16.1.1 seems to be the VM bridge of the cloud service provider.
10.0.0.0/16 via 10.0.0.254 dev enp
# access to LAN via gateway
10.0.0.254 dev enp scope link
# no idea why this is needed
172.16.1.1 dev eth0 proto dhcp scope link src 160.r.s.t metric 100
# Seems to define the next hop to the VM bridge gateway

如您所见,node其配置相同,edge因为它通过默认网关路由互联网流量(按预期)。

接口node

# ip a
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether mm:mm:mm:mm:mm:mm brd ff:ff:ff:ff:ff:ff
    inet 160.r.s.t/32 metric 100 scope global dynamic eth0
       valid_lft 55654sec preferred_lft 55654sec
    inet6 i:j:k:l::1/64 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::9400:2ff:fea1:91a3/64 scope link
       valid_lft forever preferred_lft forever
3: enp: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc fq_codel state UP group default qlen 1000
    link/ether 86:00:00:61:d1:48 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.2/32 brd 10.0.0.2 scope global dynamic enp
       valid_lft 52529sec preferred_lft 52529sec
    inet6 fe80::8400:ff:fe61:d148/64 scope link
       valid_lft forever preferred_lft forever

尝试将流量路由outpostnodeedge

node我在路由表中插入了一条看似无害的规则:

ip r a 50.a.b.c via 10.0.0.1 dev enp proto static onlink

对于任何发往前哨的流量,将其发送到edgeedge的路由表将执行到 的实际路由outpost

然而,这条规则使得从及其公共 IPnode完全无法访问。edge160.r.s.t

我不明白为什么这条规则会影响传入流量。它应该会影响针对的传出流量outpost

我需要 SNAT 后路由吗?

edge在做了更多的研究之后,似乎我可能需要一个规则

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j SNAT --to 25.u.v.w

我还没有应用这条规则,因为它不能解决node上面提到的路由表更改导致无法访问的实际问题。

正确的路由表是什么样的node

参照上面描述的任务,恰当的路由表是node什么样的?

限制:

  • 访问outpost必须路由到edge(通过 LAN 10.0.0.0/24),然后从那里使用公共源 IP 进行 NAT25.u.v.woutpost
  • 访问任何其他互联网主机都必须通过默认网关并使用node公共 IP 160.r.s.t
  • 对 LAN 10.0.0.0/24 内的节点的访问必须在本地进行路由。

为了使路由正常outpost工作,我是否必须考虑其他的事情?

有更多网络经验的人可以解释一下这个问题吗?

答案1

最后我找到了罪魁祸首。iptables规则和路由表条目基本上是正确的。然而,云提供商10.0.0.254在私有局域网中有一个不透明的网关。

我在云提供商的 Web 配置中缺少一个条目,该条目将所有流量从不透明网关重定向10.0.0.254到。edge10.0.0.1

一旦我这样做了,规则

ip r a 50.a.b.c via 10.0.0.1 dev enp proto static onlink

仍然node立即无法联系。仍然必须将流量引导到不透明网关,然后以edge某种方式将其重定向回去。

所以正确的路线是

ip r a 50.a.b.c via 10.0.0.254 dev enp proto static onlink

由于该解决方案是特定于云提供商的并且并未回答实际问题,因此我不会将自己的答案标记为解决方案。

相关内容