Hi, I have been trying to set up openvpn to cross-connect two LANs together. I have a slightly complicated goal, and I believe I have it almost(!) working, except that at one point, the packets vanish without a trace. And it seems to vanish in the kernel, of all places, which is rather puzzling!!
I have two LANs, and two identical routers (soekris/picodebian linux boxes) connecting them together. Each has a openvpn server and an openvpn client, connecting cross to the other. (I have also tried it with just one link, but my problem is not solved. Further, I think I need the symmetrical cross-connect for a bunch of other reasons -- so unless this is a no-no, please humour me). LAN-America : has host 172.20.0.13 has router 172.20.0.2, aka 172.20.1.1, 172.20.2.1 running ovpn-server 172.20.7.1/24 tun0 also running ovpn-client 172.20.8.4 tun1 [two openvpn connections criss-cross, each tun1-client connects to the other tun0-server] LAN-Europe : has host 172.20.0.11 has router 172.20.0.4, aka 172.20.3.1, 172.20.4.1, 172.20.1.100 running ovpn-server 172.20.8.1/24 tun0 also running ovpn-client 172.20.7.4 tun1 Essentially, I want 172.20.0.11 and 172.20.0.13 to both be reachable transparently from both LANs, via the criss-cross OpenVPN secured channel. The two channels give me symmetry. Of course, local LANs are working ... I can ping Router-America (172.20.0.2) from host 172.20.0.13 on LAN-America. I can ping Router-Europe (172.20.0.4) from host 172.20.0.11 on LAN-Europe. The above pings are 0.6ms consistent with ethernet. Also, openvpn is working ... I can ping Router-America (172.20.0.2) from host 172.20.0.11 on LAN-Europe. I can ping Router-Europe (172.20.0.4) from host 172.20.0.13 on LAN-America. The above pings are 4.6ms consistent with openvpn. So far so good. But when I ping host to host -- from 172.20.0.13 to 172.20.0.11 (ie. it has to come from LAN to Router, then over openvpn, then encrypted to the far router and out to the LAN there), something wierd happens. The packet disappears! I ran a tcpdump on all six interfaces : four tun[01] interfaces on both routers (Router-America tun0, tun1 and Router-Europe tun0, tun1) and two ethernets on the LAN-hosts. I see a icmp packet leave host-America 172.20.0.13 on its eth0 presumably it arrives on the Router-Europe eth1, because next ... I see it on Router-America on its tun1 which is consistent with the push route metric 3 it got on its ovpn-client I see it arrive on Router-Europe on its tun0 which means that openvpn has done its job? (Note A) I have a known-good route in Router-Europe: route add 172.20.0.11 eth1 so the kernel ought to forward the packet now. But! the packet never appears on tcpdump -i eth1 !! (Note B) And it never appears on the 172.20.0.11 itself, of course. Note A: Also, just to be sure, I looked -- I surely have no sign of a "bad source address ... packet dropped" in the openvpn syslogs. This does mean that openvpn sent the packet to the kernel, right? Also, this means it is not an iroute related problem, right? The packet is going out on the ovpn-client to the ovpn-server .. so thats another sign the iroute is not an issue. Note B: I also did a "watch ifconfig" on Router-Europe and see packet counters corraborate that the packet arrived in the Rx of tun0, but never goes out on the LAN-Europe eth1. Thats a second observation that tallies with the tcpdump observation. Another observation : very similar ... lets ping directly from the router to the host on the other LAN, but with different source address (which also means the ping goes out on the other tun). On Router-America: ping 172.20.0.11 as well as, ping -I tun1 172.20.0.11 -- goes out on tun1, replies come on tun1, and works. ping -I tun0 172.20.0.11 -- goes out on tun0, replies come on tun0, ... ... but, never deliver from tun0 to the locally running ping process!! Is the kernel eating up the packet? OpenVpn problem? TUN driver problem? kernel problem? Yes, I have done an "iptables -F" on both routers to be sure. Yes, /proc/.../ip_forward is turned on. Just to be sure, I also turned on /proc/.../proxyarp on all interfaces -- made no diff. The configurations of openvpn, and routing tables are pasted below. Any clues? Or suggestions? -- //Shrikumar ------------------------------------------------------------------------------ LAN-America : has host 172.20.0.13 has router 172.20.0.2, aka 172.20.1.1, 172.20.2.1 running ovpn-server 172.20.7.1/24 tun0 also running ovpn-client 172.20.8.4 tun1 LAN-America: server.conf is as follows : | port 1194 | proto udp | dev tun | ca /etc/openvpn/certs/ca.crt | cert /etc/openvpn/certs/pulli.crt | key /etc/openvpn/private/pulli.key # This file should be kept secret | dh /etc/openvpn/certs/dh1024-pulli.pem | server 172.20.7.0 255.255.255.0 | ifconfig-pool-persist /etc/openvpn/ifconfig-pool-persist.txt | ifconfig-pool-linear | push "route 172.20.0.0 255.255.255.0 172.20.7.1 3" | client-config-dir ccd | ccd-exclusive | client-to-client | keepalive 10 120 | user nobody | group nogroup | chroot /etc/openvpn/gaol | persist-key | persist-tun | persist-local-ip | status /etc/openvpn/openvpn-status.log | verb 4 | mute 20 Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 172.20.0.13 0.0.0.0 255.255.255.255 UH 0 0 0 eth1 172.20.7.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 172.20.0.11 172.20.8.1 255.255.255.255 UGH 0 0 0 tun1 172.20.0.10 0.0.0.0 255.255.255.255 UH 0 0 0 eth1 172.20.8.1 0.0.0.0 255.255.255.255 UH 0 0 0 tun1 172.20.0.3 0.0.0.0 255.255.255.255 UH 1 0 0 eth2 172.20.7.0 172.20.7.2 255.255.255.0 UG 0 0 0 tun0 isp-subnet 0.0.0.0 255.255.255.0 U 0 0 0 eth0 172.20.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2 172.20.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 172.20.0.0 172.20.8.1 255.255.255.0 UG 3 0 0 tun1 172.20.8.0 172.20.8.1 255.255.255.0 UG 0 0 0 tun1 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 0.0.0.0 isp-router 0.0.0.0 UG 0 0 0 eth0 ------------------------------------------------------------------------------ LAN-Europe : has host 172.20.0.11 has router 172.20.0.4, aka 172.20.3.1, 172.20.4.1, 172.20.1.100 running ovpn-server 172.20.8.1/24 tun0 also running ovpn-client 172.20.7.4 tun1 LAN-Europe : server.conf is as follows : | port 1194 | proto udp | dev tun | ca /etc/openvpn/certs/ca.crt | cert /etc/openvpn/certs/punkt.crt | key /etc/openvpn/private/punkt.key # This file should be kept | secret | dh /etc/openvpn/certs/dh1024-punkt.pem | server 172.20.8.0 255.255.255.0 | ifconfig-pool-persist /etc/openvpn/ifconfig-pool-persist.txt | ifconfig-pool-linear | push "route 172.20.0.0 255.255.255.0 172.20.8.1 3" | client-config-dir ccd | client-to-client | keepalive 10 120 | user nobody | group nogroup | chroot /etc/openvpn/gaol | persist-key | persist-tun | persist-local-ip | status /etc/openvpn/openvpn-status.log | verb 4 | mute 20 Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 172.20.0.13 172.20.7.1 255.255.255.255 UGH 0 0 0 tun1 172.20.1.1 0.0.0.0 255.255.255.255 UH 0 0 0 eth0 172.20.7.1 0.0.0.0 255.255.255.255 UH 0 0 0 tun1 172.20.0.11 0.0.0.0 255.255.255.255 UH 1 0 0 eth1 172.20.8.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 172.20.7.0 172.20.7.1 255.255.255.0 UG 0 0 0 tun1 172.20.4.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2 172.20.3.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 172.20.0.0 172.20.7.1 255.255.255.0 UG 3 0 0 tun1 172.20.8.0 172.20.8.2 255.255.255.0 UG 0 0 0 tun0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 0.0.0.0 172.20.1.1 0.0.0.0 UG 0 0 0 eth0