We need to set up an OpenBSD host to use a default gateway that's outside of it's subnet. This is all I need to do on Linux (not the actual IPs) to achieve it:

ifconfig eth0 up
route add dev eth0
route add default gw

The problem is that we don't know the proper equivalent of the middle command in OpenBSD. The man page says:

If the destination is directly reachable via an interface requiring no intermediary system to act as a gateway, the -iface modifier should be specified;

Sadly we can't seem to figure out how to make it work with that. This is a virtual host on an OVH server, they have documentation for many other operating systems showing how to do it here: http://help.ovh.co.uk/BridgeClient

  • 1
    That's not how routing works. By definition, the gateway must reside on the same subnet. If it's working on a Linux host, it's either a bug or some other fluke. – EEAA Oct 20 '13 at 12:13
  • 1
    Sounds like OVH's bizarre network again. You might not be able to get help anywhere else. – Michael Hampton Oct 20 '13 at 15:52
  • @cnst Congrats, this was by far the least helpful of the 3 comments. Seriously, shilling another hosting company without even knowing our requirements? Good job. – kshade Nov 25 '13 at 9:17
  • @kshade, online.net is one of the most well known, oldest and biggest ISPs in France; what are your requirements? – cnst Nov 25 '13 at 18:21
  • I agree that saying 'use $this provider instead' is not the answer. But I am absolutely confused. As I understand it you do need to have the DG on one of your local subnets. Even if that means creating an alias for your sole NIC and thus using two local networks. The old one, and one with only your host and the DG. – Hennes Nov 30 '13 at 0:24
up vote 5 down vote accepted

This is an old thread, but here goes.

As it happens, I run a number of OpenBSD VMs on an ESXi 6.0 running at SoYouStart, a daughter company of OVH. The network setup there is the same as with OVH and I think, although strange, its main purpose is to eliminate ARP traffic as much as possible by artificially limiting the broadcast domains, and without the need for using VLANs for example.

In my case, I've requested extra IP addresses from OVH and they come from a completely different range. For the discussion here, let's assume these are my settings:

  • my main IP address (which the ESXi Host is using):
  • the extra IP address range for VM guests:
  • the default gateway for ALL of the above:
  • please note - all hosts need to use a host netmask ( due to the way the OVH network is configured

To configure the routing on the OpenBSD host, this is what I need to do:

ifconfig vmx0 inet 
route add -inet -llinfo -link -static -iface vmx0 
route add -inet default

To have all this done during the start, I ignore the /etc/mygate file and put the following in the /etc/hostname.vmx0:

!sleep 2
!route add -inet -llinfo -link -static -iface vmx0
!route add -inet default

You will notice the sleep command - for some reason this is required on OpenBSD 5.9 but wasn't before. Without the sleep, the first of the to route commands will not be executed and therefore your routing will not be configured correctly.

This works using the following trick:

  • we configure the IP address on the interface
  • with the first route command we translate the IP address of the gateway ( to a link address (MAC address); this is done by the -llinfo option;
  • in the same route command, using the -link option, we install the link address to the routing table and using the -iface vmx0 we tell the kernel which network interface that link address is reachable via; the -static switch marks it as a manually inserted entry into the routing table
  • the second route command can now succeed, as the route to the default gateway is now known

One thing I did come across in the setup above, which I have no solution for yet, is that one of four OpenBSD hosts, configured in the exact same way, running the exact same version of the OS and the exact same kernel build, and even running on the same VMware host, every 24 hours or so, seems to be "losing" that magic route from its routing table...

Try setting up an alias on the interface instead:

ifconfig eth0 alias

OpenBSD will probably have a different interface name then eth0 depending on the driver used.

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.