Date: Fri, 12 Apr 2002 08:20:39 -0400 From: "Mark Uhrmacher" <maui@alum.mit.edu> To: <freebsd-questions@FreeBSD.ORG> Subject: gif device checksum problem Message-ID: <008701c1e21c$758ef7b0$0104a8c0@controlcenter>
next in thread | raw e-mail | index | archive | help
Hi all, Basically, I'm trying to setup an IPSEC-based VPN between two LANs that use cable modems to connect to the Internet. In both cases the internal LANs are behind "residential gateways" that provide NAT and some limited firewall services. For the first step, however, I'm attempting to get an IPv4-in-IPv4 tunnel working. Both of these gateways are configured to shunt all traffic from the external interface over to the FreeBSD box on their internal network described below. So, they don't filter but they do change the destination IP address on all packets to the internal address. Note this is the only way (I've found) to get non-TCP/UDP IP traffic coming from the Internet through these gateways. Both FreeBSD boxes are running 4.5 with a kernel enhanced with the following four lines added to the GENERIC kernel: # IPSec configuration params added by maui 2-Apr-2002 options IPSEC options IPSEC_ESP options IPSEC_DEBUG device gif 4 # tunnel for ipsec The configuration: NOTE: the external addresses for these setups have been changed to the alphabetic addresses a.b.c.d and e.f.g.h +------------+ +---------+ | | 192. | | | freebsd-hp +-- 168.-+ Netgear +--a.b.c.d---+ | | 4.2 | RT-314 | | +------------+ +---------+ | Internet +------------+ +---------+ | | | 192. | | | | unixserver +-- 168.-+ D-Link +--e.f.g.h---+ | | 0. | DI-713P | +------------+ 174 +---------+ I've configured tunnels as described below: freebsd-hp# gifconfig -a gif0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1280 inet6 fe80::2a0:c9ff:fe73:e269%gif0 prefixlen 64 inet 192.168.4.2 --> 192.168.0.174 netmask 0xffffff00 physical address inet 192.168.4.2 --> e.f.g.h unixserver# gifconfig -a gif0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1280 inet 192.168.0.174 --> 192.168.4.2 netmask 0xffffff00 inet6 fe80::2b0:d0ff:fe29:d3be%gif0 prefixlen 64 physical address inet 192.168.0.174 --> a.b.c.d After I did this I attempted pings in both directions. When that didn't work I started to do a little debugging with tcpdump and found some very interesting data. When pinging from freebsd-hp (192.168.4.2) to unixserver (192.168.0.174) I get the following output from tcpdump on both hosts: -- output -- freebsd-hp# tcpdump -vvv -n dst host e.f.g.h or src host e.f.g.h tcpdump: listening on fxp0 07:54:16.213186 192.168.4.2 > e.f.g.h: 192.168.4.2 > 192.168.0.174: icmp: echo request (ttl 64, id 54896, len 84) (ttl 30, id 54897, len 104) 07:54:17.223215 192.168.4.2 > e.f.g.h: 192.168.4.2 > 192.168.0.174: icmp: echo request (ttl 64, id 54905, len 84) (ttl 30, id 54906, len 104) 07:54:18.233106 192.168.4.2 > e.f.g.h: 192.168.4.2 > 192.168.0.174: icmp: echo request (ttl 64, id 54908, len 84) (ttl 30, id 54909, len 104) 07:54:19.243109 192.168.4.2 > e.f.g.h: 192.168.4.2 > 192.168.0.174: icmp: echo request (ttl 64, id 54911, len 84) (ttl 30, id 54912, len 104) unixserver# tcpdump -vvv -n src host a.b.c.d or dst host a.b.c.d tcpdump: listening on xl0 07:54:12.472425 a.b.c.d > 192.168.0.174: 192.168.4.2 > 192.168.0.174: icmp: echo request (ttl 64, id 54896, len 84) (ttl 11, id 54897, len 104) 07:54:12.472497 192.168.0.174 > a.b.c.d: 192.168.0.174 > 192.168.4.2: icmp: echo reply (ttl 64, id 14302, len 84) (ttl 30, id 14303, len 104, bad cksum 0!) 07:54:13.482047 a.b.c.d > 192.168.0.174: 192.168.4.2 > 192.168.0.174: icmp: echo request (ttl 64, id 54905, len 84) (ttl 11, id 54906, len 104) 07:54:13.482094 192.168.0.174 > a.b.c.d: 192.168.0.174 > 192.168.4.2: icmp: echo reply (ttl 64, id 14306, len 84) (ttl 30, id 14307, len 104, bad cksum 0!) --- end output --- So the ping request from freebsd-hp arrives at unixserver and a response is sent. Unfortunately, it never arrives. In addition tcpdump claims the packets send by unixserver have bad checksums. I suspect this is the problem. It is worth noting that when pinging from unixserver to freebsd-hp the request is lost and the ping request packets have the bad checksums. Regular pings to the external addresses work fine and have been verified by tcpdump not to have checksum errors. Also, the checksum error isn't specific to icmp. I get the same problem with ssh between the two boxes. It seems all packets going over the gif interface on unixserver have bad (uncalculated) checksums. Now on the questions: - why would taffic over the gif device not calculate checksums? - is there some way to turn them on? - why does one system do this and not the other? They were installed with 4.5 about a week apart Thanks, Mark To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-questions" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?008701c1e21c$758ef7b0$0104a8c0>