Hi all,

I run OpenVPN for my virtual private networking as it's a workhorse I've gotten to know well over the years and is also one of the few that supports layer 2 networking (that is, forwarding Ethernet frames over the VPN).

I also use it in L3 mode with Android clients for forwarding VoIP traffic.

OpenVPN circa release 2.3 introduced `proto udp6`, which is supposed to bind to the port dual-stack. I notice when I do this though, connections via IPv4 get refused.

Relevant software versions:
vk4msl-gap# openvpn --version
OpenVPN 2.6.12 x86_64-unknown-openbsd7.6 [SSL (OpenSSL)] [LZO] [LZ4] 
[MH/RECVDA] [AEAD]
library versions: LibreSSL 4.0.0, LZO 2.10
Originally developed by James Yonan
Copyright (C) 2002-2024 OpenVPN Inc <sa...@openvpn.net>
Compile time defines: enable_async_push=no enable_comp_stub=no 
enable_crypto_ofb_cfb=yes enable_dco=no enable_debug=yes enable_dlopen=unknown 
enable_dlopen_self=unknown enable_dlopen_self_static=unknown 
enable_fast_install=needless enable_fragment=yes enable_gtk_doc=no 
enable_iproute2=no enable_libtool_lock=yes enable_lz4=yes enable_lzo=yes 
enable_management=yes enable_pam_dlopen=no enable_pedantic=no enable_pkcs11=no 
enable_plugin_auth_pam=no enable_plugin_down_root=yes enable_plugins=yes 
enable_port_share=yes enable_selinux=no enable_shared=yes 
enable_shared_with_static_runtimes=no enable_silent_rules=no enable_small=no 
enable_static=yes enable_strict=no enable_strict_options=no enable_systemd=no 
enable_werror=no enable_win32_dll=yes enable_wolfssl_options_h=yes 
enable_x509_alt_username=no with_aix_soname=aix with_crypto_library=openssl 
with_gnu_ld=no with_mem_check=no with_openssl_engine=no with_sysroot=no
vk4msl-gap# uname -a
OpenBSD vk4msl-gap.dmz.longlandclan.id.au 7.6 GENERIC.MP#1 amd64

I've kludged around this in L2 configurations by running two OpenVPN daemons on different `tap` interfaces and bridging them (along with the Ethernet they connect to), but I cannot do this with a `tun` device, and it's a really icky way to work around an issue that shouldn't exist in 2025 anyway. One daemon can do both on Linux simultaneously, it should likewise be able to do both on OpenBSD.

When I use `proto udp6` I see the following in `netstat`:
vk4msl-gap# netstat -nl | grep 1194
udp6 0 0 *.1194 *.*

In this situation from OpenVPN on my Android 10 phone, I see connection refusals on IPv4 (and strangely, "network is unreachable" on IPv6… I'll blame Telstra's 4G network for that).

Obviously, `proto udp4` does what it says on the tin. `proto udp` seems to behave as an alias for `proto udp4`. `proto udp6` is supposed to listen dual-stack, making it possible to connect via either, however on OpenBSD, it seems to be IPv6-exclusive.

How do I get it to bind to both IPv4 and IPv6?
--
Stuart Longland (aka Redhatter, VK4MSL)

I haven't lost my mind...
  ...it's backed up on a tape somewhere.

Reply via email to