On Sun, Mar 04, 2018 at 01:08:21PM +0200, Atanas Vladimirov wrote:
> Hi,
>
> I can't make OSPF to work on gif over IPsec.
> With tcpdump on gif I see the OSPFv2-hello only from localhost:
>
> # R1
> [ns]~$ tcpdump -nei gif0
> tcpdump: listening on gif0, link-type LOOP
> 23:19:29.181685 10.255.255.2 > 224.0.0.5: OSPFv2-hello 44: rtrid
> 192.168.1.1 area 0.0.0.1 [tos 0xc0] [ttl 1]
> 23:19:39.192025 10.255.255.2 > 224.0.0.5: OSPFv2-hello 44: rtrid
> 192.168.1.1 area 0.0.0.1 [tos 0xc0] [ttl 1]
> 23:19:49.202372 10.255.255.2 > 224.0.0.5: OSPFv2-hello 44: rtrid
> 192.168.1.1 area 0.0.0.1 [tos 0xc0] [ttl 1]
> 23:19:59.212730 10.255.255.2 > 224.0.0.5: OSPFv2-hello 44: rtrid
> 192.168.1.1 area 0.0.0.1 [tos 0xc0] [ttl 1]
> 23:20:09.223064 10.255.255.2 > 224.0.0.5: OSPFv2-hello 44: rtrid
> 192.168.1.1 area 0.0.0.1 [tos 0xc0] [ttl 1]
> 23:20:19.233393 10.255.255.2 > 224.0.0.5: OSPFv2-hello 44: rtrid
> 192.168.1.1 area 0.0.0.1 [tos 0xc0] [ttl 1]
>
> # R2
> [hodor]~$ tcpdump -nei gif0
> tcpdump: listening on gif0, link-type LOOP
> 12:51:59.316704 10.255.255.1 > 224.0.0.5: OSPFv2-hello 44: rtrid 172.16.1.1
> backbone [tos 0xc0] [ttl 1]
> 12:52:09.327002 10.255.255.1 > 224.0.0.5: OSPFv2-hello 44: rtrid 172.16.1.1
> backbone [tos 0xc0] [ttl 1]
> 12:52:19.337314 10.255.255.1 > 224.0.0.5: OSPFv2-hello 44: rtrid 172.16.1.1
> backbone [tos 0xc0] [ttl 1]
>
> While on enc0 both hello's appears (not sure if `bad ip cksum` is the reason
> for my issues):
>
> # R1
> [ns]~$ tcpdump -nvi enc0
> tcpdump: listening on enc0, link-type ENC
> 12:24:37.625873 (authentic,confidential): SPI 0x11af4dae: 93.123.39.67 >
> 95.87.227.232: 10.255.255.1 > 224.0.0.5: OSPFv2-hello 44: rtrid 172.16.1.1
> backbone E mask 255.255.255.255 int 10 pri 1 dead 40 nbrs [tos 0xc0] [ttl 1]
> (id 25841, len 64) (ttl 60, id 37752, len 84)
> 12:24:41.882173 (authentic,confidential): SPI 0x1a3fbc6d: 95.87.227.232 >
> 93.123.39.67: 10.255.255.2 > 224.0.0.5: OSPFv2-hello 44: rtrid 192.168.1.1
> backbone E mask 255.255.255.255 int 10 pri 1 dead 40 nbrs [tos 0xc0] [ttl 1]
> (id 27818, len 64) (ttl 64, id 60563, len 84, bad ip cksum 32d7! -> c614)
> 12:24:47.636188 (authentic,confidential): SPI 0x11af4dae: 93.123.39.67 >
> 95.87.227.232: 10.255.255.1 > 224.0.0.5: OSPFv2-hello 44: rtrid 172.16.1.1
> backbone E mask 255.255.255.255 int 10 pri 1 dead 40 nbrs [tos 0xc0] [ttl 1]
> (id 36067, len 64) (ttl 60, id 65348, len 84)
> 12:24:51.892467 (authentic,confidential): SPI 0x1a3fbc6d: 95.87.227.232 >
> 93.123.39.67: 10.255.255.2 > 224.0.0.5: OSPFv2-hello 44: rtrid 192.168.1.1
> backbone E mask 255.255.255.255 int 10 pri 1 dead 40 nbrs [tos 0xc0] [ttl 1]
> (id 5127, len 64) (ttl 64, id 12476, len 84, bad ip cksum 201! -> 81ec)
> 12:24:57.646535 (authentic,confidential): SPI 0x11af4dae: 93.123.39.67 >
> 95.87.227.232: 10.255.255.1 > 224.0.0.5: OSPFv2-hello 44: rtrid 172.16.1.1
> backbone E mask 255.255.255.255 int 10 pri 1 dead 40 nbrs [tos 0xc0] [ttl 1]
> (id 39220, len 64) (ttl 60, id 1938, len 84)
>
> # R2
> [hodor]~$ tcpdump -nvi enc0 | grep OSPF
> tcpdump: listening on enc0, link-type ENC
> 12:28:57.894007 (authentic,confidential): SPI 0x11af4dae: 93.123.39.67 >
> 95.87.227.232: 10.255.255.1 > 224.0.0.5: OSPFv2-hello 44: rtrid 172.16.1.1
> backbone E mask 255.255.255.255 int 10 pri 1 dead 40 nbrs [tos 0xc0] [ttl 1]
> (id 3667, len 64) (ttl 64, id 14037, len 84, bad ip cksum 2b6d! -> 7bd3)
> 12:29:02.151763 (authentic,confidential): SPI 0x1a3fbc6d: 95.87.227.232 >
> 93.123.39.67: 10.255.255.2 > 224.0.0.5: OSPFv2-hello 44: rtrid 192.168.1.1
> backbone E mask 25
> 5.255.255.255 int 10 pri 1 dead 40 nbrs [tos 0xc0] [ttl 1] (id 16974, len
> 64) (ttl 60, id 21648, len 84)
> 12:29:07.904315 (authentic,confidential): SPI 0x11af4dae: 93.123.39.67 >
> 95.87.227.232: 10.255.255.1 > 224.0.0.5: OSPFv2-hello 44: rtrid 172.16.1.1
> backbone E mask 255
> .255.255.255 int 10 pri 1 dead 40 nbrs [tos 0xc0] [ttl 1] (id 45590, len 64)
> (ttl 64, id 35262, len 84, bad ip cksum 2743! -> 28ea)
> 12:29:12.162049 (authentic,confidential): SPI 0x1a3fbc6d: 95.87.227.232 >
> 93.123.39.67: 10.255.255.2 > 224.0.0.5: OSPFv2-hello 44: rtrid 192.168.1.1
> backbone E mask 25
> 5.255.255.255 int 10 pri 1 dead 40 nbrs [tos 0xc0] [ttl 1] (id 19966, len
> 64) (ttl 60, id 3134, len 84)
> 12:29:17.914621 (authentic,confidential): SPI 0x11af4dae: 93.123.39.67 >
> 95.87.227.232: 10.255.255.1 > 224.0.0.5: OSPFv2-hello 44: rtrid 172.16.1.1
> backbone E mask 255
> .255.255.255 int 10 pri 1 dead 40 nbrs [tos 0xc0] [ttl 1] (id 36161, len 64)
> (ttl 64, id 53105, len 84, bad ip cksum fcb8! -> e336)
> 12:29:22.172468 (authentic,confidential): SPI 0x1a3fbc6d: 95.87.227.232 >
> 93.123.39.67: 10.255.255.2 > 224.0.0.5: OSPFv2-hello 44: rtrid 192.168.1.1
> backbone E mask 25
> 5.255.255.255 int 10 pri 1 dead 40 nbrs [tos 0xc0] [ttl 1] (id 36221, len
> 64) (ttl 60, id 29514, len 84)
>
> If I set a static routes the regular traffic flows as it should.
>
> The configs are the same on both routers:
>
> # R1
> [ns]~$ doas cat /etc/ipsec.conf
> local_ip="95.87.227.232"
> remote_ip="93.123.39.67"
> ike esp transport from $local_ip to $remote_ip
>
> # R2
> [hodor]~$ doas cat /etc/ipsec.conf
> local_ip="93.123.39.67"
> remote_ip="95.87.227.232"
> ike esp transport from $local_ip to $remote_ip
>
> # R1
> [ns]~$ doas cat /etc/hostname.gif0
> up
> mtu 1400
> tunnel 95.87.227.232 93.123.39.67
> inet 10.255.255.2/32
> dest 10.255.255.1
>
> # R2
> [hodor]~$ doas cat /etc/hostname.gif0
> up
> mtu 1400
> tunnel 93.123.39.67 95.87.227.232
> inet 10.255.255.1/32
> dest 10.255.255.2
>
> # R1
> [ns]~$ doas cat /etc/ospfd.conf
> # $OpenBSD: ospfd.conf,v 1.1 2014/07/11 16:36:35 deraadt Exp $
>
> # macros
> password="secret"
>
> # global configuration
> router-id 192.168.1.1
> fib-update yes
> redistribute connected
>
> # areas
> area 0.0.0.0 {
> interface gif0
> }
>
> # R2
> [hodor]~$ doas cat /etc/ospfd.conf
> # $OpenBSD: ospfd.conf,v 1.1 2014/07/11 16:36:35 deraadt Exp $
>
> # macros
> password="secret"
>
> # global configuration
> router-id 172.16.1.1
> fib-update yes
> redistribute connected
>
> # areas
> area 0.0.0.0 {
> interface vether0
> interface gif0
> }
>
> # R1
> [ns]~$ ospfctl sh nei
> ID Pri State DeadTime Address Iface Uptime
>
> # R1
> [ns]~$ ospfctl sh int
> Interface Address State HelloTimer Linkstate Uptime nc ac
> gif0 10.255.255.2/32 P2P 00:00:04 unknown 00:15:37 0 0
>
> # R2
> [hodor]~$ ospfctl sh nei
> ID Pri State DeadTime Address Iface Uptime
> 172.16.1.9 1 FULL/DR 00:00:36 172.16.1.9 vether0 02:10:14
>
> # R2
> [hodor]~$ ospfctl sh int
> Interface Address State HelloTimer Linkstate Uptime nc ac
> gif0 10.255.255.1/32 P2P 00:00:04 unknown 02:10:24 0 0
> vether0 172.16.1.1/24 BCKUP 00:00:09 active 02:10:24 1 1
>
> Please, let me know if I'm doing something wrong/stupid or this is bug
> somewhere in the stack.
I applied your configs to newly created VMs with 6.2-beta from today
(pf disabled). I see the same with tcpdump as you do.
Then I tried this:
- the OSPF adjacency comes up when I disable IPsec
- when I replace gif with gre ospfd is happy (with IPsec active)
(sysctl net.inet.gre.allow=1; mv /etc/hostname.{gif0,gre0})
I have a similar setup in production on 6.2 (with tunneldomain added
to the
mix). This works.
To me this looks like a regression when gif is used with IPsec.