OpenBSD:子网外的网关(适用于 Linux)

ksh*_*ade 3 linux routing openbsd gateway

我们需要设置一个 OpenBSD 主机来使用它子网之外的默认网关。这就是我在 Linux(不是实际的 IP)上需要做的一切来实现它:

ifconfig eth0 33.33.33.33/31 up
route add 33.33.33.254 dev eth0
route add default gw 33.33.33.254
Run Code Online (Sandbox Code Playgroud)

问题是我们不知道 OpenBSD 中中间命令的正确等价物。手册页说:

如果目的地可通过不需要中介系统作为网关的接口直接到达,则应指定 -iface 修饰符;

可悲的是,我们似乎无法弄清楚如何让它发挥作用。这是 OVH 服务器上的虚拟主机,他们有许多其他操作系统的文档,展示了如何在此处执行此操作:http : //help.ovh.co.uk/BridgeClient

小智 8

这是一个旧线程,但在这里。

碰巧的是,我在 OVH 的子公司 SoYouStart 上运行的 ESXi 6.0 上运行了许多 OpenBSD VM。那里的网络设置与 OVH 相同,我认为,虽然很奇怪,但它的主要目的是通过人为限制广播域来尽可能多地消除 ARP 流量,而不需要例如使用 VLAN。

就我而言,我从 OVH 请求了额外的 IP 地址,它们来自完全不同的范围。对于此处的讨论,让我们假设这些是我的设置:

  • 我的主要 IP 地址(ESXi 主机正在使用):213.0.113.78/32
  • VM 来宾的额外 IP 地址范围:192.0.2.64/30
  • 以上所有的默认网关:213.0.113.254
  • 请注意 - 由于 OVH 网络的配置方式,所有主机都需要使用主机网络掩码 (255.255.255.255)

要在 OpenBSD 主机上配置路由,我需要这样做:

ifconfig vmx0 inet 192.0.2.64 255.255.255.255 
route add -inet 213.0.113.254 -llinfo -link -static -iface vmx0 
route add -inet default 213.0.113.254
Run Code Online (Sandbox Code Playgroud)

为了在开始时完成所有这些,我忽略该/etc/mygate文件并将以下内容放入/etc/hostname.vmx0

inet 192.0.2.64 255.255.255.255
!sleep 2
!route add -inet 213.0.113.254 -llinfo -link -static -iface vmx0
!route add -inet default 213.0.113.254
Run Code Online (Sandbox Code Playgroud)

你会注意到这个sleep命令——出于某种原因,它在 OpenBSD 5.9 上是必需的,但以前不是。如果没有sleep,第一个 toroute命令将不会执行,因此您的路由将无法正确配置。

这使用以下技巧:

  • 我们在接口上配置IP地址
  • 使用第一个route命令,我们将网关的 IP 地址 (213.0.113.254) 转换为链接地址(MAC 地址);这是由-llinfo选项完成的;
  • 在同一route命令中,使用-link选项,我们将链接地址安装到路由表中,并使用-iface vmx0我们告诉内核该链接地址可通过哪个网络接口访问;所述-static开关马克它作为一个手动插入进入路由表
  • 第二个route命令现在可以成功,因为现在知道到默认网关的路由

我在上面的设置中遇到的一件事,我还没有解决方案,是四个 OpenBSD 主机之一,以完全相同的方式配置,运行完全相同的操作系统版本和完全相同的内核构建,并且即使每 24 小时左右在同一台 VMware 主机上运行,​​似乎也会从其路由表中“丢失”那条神奇的路由......