I believe the following might be a bug (although I'd love to stand corrected on it) with OpenVPN 2.1beta8 running on OpenBSD.

server.conf (OpenBSD 3.7-stable):

  local W.X.Y.Z
  port 1194
  proto tcp-server
  dev tun0
  ca crypto/ca.crt
  cert crypto/vpn1.albourne.com.crt
  key crypto/vpn1.albourne.com.key  # This file should be kept secret
  dh crypto/dh1024.pem
  topology subnet
  server 192.168.172.0 255.255.252.0
  ifconfig-pool-persist /usr/local/var/run/openvpn-ipp.txt
  client-to-client
  keepalive 10 120
  comp-lzo
  persist-key
  persist-tun
  status /usr/local/var/run/openvpn-status.log
  verb 3

client.conf (Ubuntu 5.10/Linux 2.6.12):

  client
  dev tun
  proto tcp-client
  remote W.X.Y.Z 1194
  resolv-retry infinite
  nobind
  persist-key
  persist-tun
  ca ca.crt
  cert cygnus.crt
  key cygnus.key
  ns-cert-type server
  comp-lzo
  verb 3

The server and client (both 2.1beta8, compiled from source) happily start up with no errors, handshake and set the relevant local interfaces:

[client]
Fri Feb 10 01:00:28 2006 PUSH: Received control message: 'PUSH_REPLY,route-gateway 192.168.172.1,topology subnet,ping 10,ping-restart 120,ifconfig 192.168.172.3 255.255.252.0'
Fri Feb 10 01:00:28 2006 OPTIONS IMPORT: timers and/or timeouts modified
Fri Feb 10 01:00:28 2006 OPTIONS IMPORT: --ifconfig/up options modified
Fri Feb 10 01:00:28 2006 OPTIONS IMPORT: route-related options modified
Fri Feb 10 01:00:28 2006 TUN/TAP device tun0 opened
Fri Feb 10 01:00:28 2006 TUN/TAP TX queue length set to 100
Fri Feb 10 01:00:28 2006 /sbin/ifconfig tun0 192.168.172.3 netmask 255.255.252.0 mtu 1500 broadcast 192.168.175.255

[server]
Fri Feb 10 00:00:26 2006 83.X.Y.Z:16009 [cygnus] Peer Connection Initiated with 83.X.Y.Z:16009 Fri Feb 10 00:00:26 2006 cygnus/83.X.Y.Z:16009 MULTI: Learn: 192.168.172.3 -> cygnus/83.X.Y.Z:16009 Fri Feb 10 00:00:26 2006 cygnus/83.X.Y.Z:16009 MULTI: primary virtual IP for cygnus/83.X.Y.Z:16009: 192.168.172.3 Fri Feb 10 00:00:27 2006 cygnus/83.X.Y.Z:16009 PUSH: Received control message: 'PUSH_REQUEST' Fri Feb 10 00:00:27 2006 cygnus/83.X.Y.Z:16009 SENT CONTROL [cygnus]: 'PUSH_REPLY,route-gateway 192.168.172.1,topology subnet,ping 10,ping-restart 120,ifconfig 192.168.172.3 255.255.252.0' (status=1)


The output from ifconfig:

[client]
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:192.168.172.3 P-t-P:192.168.172.3 Mask:255.255.252.0
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)


[server]
tun0: flags=9843<UP,BROADCAST,RUNNING,SIMPLEX,LINK0,MULTICAST> mtu 1500
        address: 00:bd:af:74:c0:01
        inet 192.168.172.1 netmask 0xfffffc00 broadcast 192.168.175.255
        inet6 fe80::2bd:afff:fe74:c001%tun0 prefixlen 64 scopeid 0x17

So that looks just fine.

If I try to send ICMP ping packets down the wire observing with tcpdump -i tun0 on both systems I get the following output:

[client]
00:54:41.013660 IP (tos 0x0, ttl 64, id 8, offset 0, flags [DF], proto: ICMP (1), length: 84) 192.168.172.4 > 192.168.172.1: ICMP echo request, id 17700, seq 9, length 64 00:54:42.013493 IP (tos 0x0, ttl 64, id 9, offset 0, flags [DF], proto: ICMP (1), length: 84) 192.168.172.4 > 192.168.172.1: ICMP echo request, id 17700, seq 10, length 64

[server]
00:54:41.041494 0:54:0:8:40:0 0:0:0:2:45:0 4001 88:
                         614a c0a8 ac04 c0a8 ac01 0800 cf8b 4524
                         0009 c1ca ef43 4735 0000 0809 0a0b 0c0d
                         0e0f 1011 1213 1415 1617 1819 1a1b 1c1d
                         1e1f 2021 2223 2425 2627 2829 2a2b 2c2d
                         2e2f 3031 3233 3435 3637
00:54:42.041826 0:54:0:9:40:0 0:0:0:2:45:0 4001 88:
                         6149 c0a8 ac04 c0a8 ac01 0800 768b 4524
                         000a c2ca ef43 9f34 0000 0809 0a0b 0c0d
                         0e0f 1011 1213 1415 1617 1819 1a1b 1c1d
                         1e1f 2021 2223 2425 2627 2829 2a2b 2c2d
                         2e2f 3031 3233 3435 3637

(I _think_ the above are the correct packets on the server-side, there's nothing but stuff like the above)

If I remove the "topology subnet" from server.conf and restart I can happily ping through the tunnel and the output from tcpdump on both ends is as expected (note that the client is assigned IP 192.168.172.6, as expected, with the map30 topology):

[server]
sudo tcpdump -i tun0
tcpdump: listening on tun0, link-type LOOP
23:59:40.442035 192.168.172.6 > 192.168.172.1: icmp: echo request (DF)
23:59:40.442074 192.168.172.1 > 192.168.172.6: icmp: echo reply (DF)
23:59:41.442278 192.168.172.6 > 192.168.172.1: icmp: echo request (DF)
23:59:41.442293 192.168.172.1 > 192.168.172.6: icmp: echo reply (DF)
23:59:42.443881 192.168.172.6 > 192.168.172.1: icmp: echo request (DF)
23:59:42.443894 192.168.172.1 > 192.168.172.6: icmp: echo reply (DF)
23:59:43.444639 192.168.172.6 > 192.168.172.1: icmp: echo request (DF)

This seems to indicate that there is a problem on OpenBSD 3.7 with OpenVPN 2.1beta8.

I am more than willing to act as a test site as I have a redundant firewall pair and while I debug this problem I can run the primary in map30 mode to give VPN access to remote clients.

Please let me know if you need more information and/or want me to try stuff.

Ciao,

Arrigo


Reply via email to