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

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

我们需要设置 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

问题是我们不知道 OpenBSD 中中间命令的正确对应项。手册页显示:

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

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

答案1

这是一个老话题,但我还是想讲一下。

碰巧的是,我在 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

为了在启动时完成所有这些工作,我忽略该/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

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

这可以通过以下技巧来实现:

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

我在上面的设置中确实遇到了一件事,但我还没有解决方案,那就是四个 OpenBSD 主机中的一台,以完全相同的方式配置,运行完全相同版本的操作系统和完全相同的内核构建,甚至在同一个 VMware 主机上运行,​​大约每 24 小时一次,似乎就会从其路由表中“丢失”那条神奇的路由......

答案2

我和 Mike 遇到了同样的问题,发现很难OpenBSD正确路由分配的 IP 地址。与 OVH 类似,myLoc.de 上的专用服务器提供网络掩码为 255.255.255.255 的 IP 地址,需要在 VM 内部进行点对点路由。我已经在其他客户操作系统中处理过这个问题。在 Debian 10 中,我将在客户机中设置外部 IP,如下所示:

# nano /etc/network/interfaces

iface eth0 inet static
        address 56.78.91.56/32    ## this is the additional external IP
        pointopoint 99.78.91.101  ## this is the gateway for the additional IP (which in my case is also the main IP of the server)
        gateway 99.78.91.101

...在 Ubuntu 18.04 中使用netplan它的相关部分将如下所示,其工作原理如下on-link

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0: #Interface-Name
      addresses:
        - 56.78.91.56/32 ## additional external IP
      routes:
      - to: 0.0.0.0/0
        via: 99.78.91.101 ## gateway for the additional IP
        on-link: true

ip使用选项通过命令进行配置onlink我将执行以下操作:

ip addr add 56.78.91.56/32 dev eth0
ip route add default via 99.78.91.101 dev eth0 onlink

route不知何故,命令的记录方式OpenBSD而 FreeBSD 没有明确说明如何在 BSD 上做类似的事情,而且使用网络搜索几乎找不到任何示例。也许对于那些更熟悉网络的人来说,答案是显而易见的。在我找到 Mike 在他发表的另一篇文章中更完整的答案之前,我终于让它工作了。因此,我将在这里用在 OpenBSD 6.6 上实际工作的配置更新他的答案(eth0 只是实际接口名称的占位符):

ifconfig eth0 -inet 56.78.91.56/32
route -v add -inet 99.78.91.101/32 -link -iface eth0
route -v add -inet default 99.78.91.101

这些命令创建一个包含如下相关行的路由表:

route -n show -inet

Routing tables - Internet:
Destination     Gateway            Flags  Refs    Use   Mtu  Prio Iface
default         99.78.91.101       UGS       5     52     -     8  eth0
99.78.91.101    cc:aa:d2:4f:08:8f  UHLSh     1     30     -     8  eth0 # MAC address on the server
56.78.91.56     7a:33:f7:42:44:7e  UHLl      0     26     -     1  eth0 # MAC address of the VM
56.78.91.56/32  56.78.91.56        UCn       0      0     -     4  eth0

要将 OpenBSD 6.6 配置永久保存在/etc/hostname.eth0文件中,请使用以下命令。(显然,所有命令的执行都需要 2 秒的延迟。)

inet 56.78.91.56/32
!sleep 2
!route -v add -inet 99.78.91.101/32 -link -iface eth0
!route -v add -inet default 99.78.91.101

目前,该功能在 Proxmox 6 服务器上有效,OpenBSD 作为客户机在 KVM 中运行。外部 IP 地址附加到服务器上的虚拟网桥。我不知道许多专用服务器公司是否都像这样设置了网络,这使得配置更加困难,但我在 Webtropia、Servdiscount(均连接到 myLoc)上遇到了这个问题,并在 Hetzner 上看到了类似的问题。

答案3

尝试在接口上设置别名:

ifconfig eth0 alias 33.33.33.254

根据所使用的驱动程序,OpenBSD 可能会具有与 eth0 不同的接口名称。

相关内容