Stephen Warren wrote:
I run OpenVPN on my laptop, and move between different physical
locations/networks without rebooting my laptop or restarting OpenVPN.
All I do is hibernate/unhibernate.

After unhibernate, OpenVPN correctly detects that its "connection" has
dropped, and attempts to re-initiate the connection. My config file uses
a DNS name for the "remote" option (since the server uses DHCP for its
IP, and the hostname is a dyndns hostname).

However, the DNS lookup never works if I've moved network locations,
since glibc caches the content of /etc/resolv.conf forever, and hence
OpenVPN (via glibc) continues to attempt to query the DNS servers from
the old physical location/network, which refuse to answer clients at the
new location/network, and connectivity may not even be available to such
an IP.

I believe the fix for this is for OpenVPN to call the "res_init()"
function whenever it attempts to restart a broken connection (or at
least periodically when doing this) or when DNS lookups fail. This
should flush the /etc/resolv.conf cache, pick up the new entries that
are relevant to the laptops' new location/network, and everything will
be happy.

For more (brief) details, see the following bug report:

http://sourceware.org/bugzilla/show_bug.cgi?id=3675



I've merged a patch to deal with this into the subversion directory for the 2.1 series:

http://svn.openvpn.net/projects/openvpn/branches/BETA21/openvpn/

It will be included in 2.1-rc8.

------------------------------------------------------------------------
r2928 | james | 2008-05-08 22:21:53 -0600 (Thu, 08 May 2008) | 4 lines
Changed paths:
  M /branches/BETA21/openvpn/configure.ac
  M /branches/BETA21/openvpn/socket.c
  M /branches/BETA21/openvpn/syshead.h

On systems that support res_init, always call it
before calling gethostbyname to ensure that
resolver configuration state is current.

------------------------------------------------------------------------

James


Reply via email to