PPP and Route Delete

Melissa Jenkins melissa-freebsd at littlebluecar.co.uk
Wed Mar 9 20:49:18 UTC 2011


> The self-pointing route 10.0.5.1 should have multiple references set on
> it, and that route won't be deleted from the routing table until the 
> last reference is removed.
> 
> You can verify that by checking the "netstat" output, the "Ref" column
> after tun1 has been created.

Unfortunately PPP doesn't increase the reference count:

After connecting 1 VPN:
Destination        Gateway            Flags    Refs      Use  Netif Expire
10.0.5.1           link#12            UHS         0        0    lo0

After connecting the second VPN:
Destination        Gateway            Flags    Refs      Use  Netif Expire
10.0.5.1           link#12            UHS         1        0    lo0

When you disconnect the second VPN all the routes pointing to 10.0.5.1 are removed.

If I add 10.0.5.1 as an proper alias to an interface (eg loopback) it seems to work as you would expect and disconnecting one VPN doesn't disconnect all the rest.

>> I've been working on migrating a PPTP server from FreeBSD 7.1 to FreeBSD 8.1.  The server is configured using PopTop (from ports) and PPP (/usr/sbin) rather than MPD.  (Before anybody tells me to use MPD we can't because it doesn't inject packets into the kernel in the same way and it's not possible to filter on them correctly)
>> 
>> Basic PPTP connection works properly. 
>> 
>> The fun happens when I have two simultaneous users.  The first one to DISCONNECT deletes the routes for both of them and all PPTP traffic ceases.
> 
> Just been working my way through the PPP code - which doesn't actually appear to have changed.
> 
> However, the netinet/in.c does have some comments in the SVN history about deleting the loopback address, this appears to have been merged in as part of the 8 release cycle (r197231 perhaps) (though I'm not an expert at SVN etc)
> 
> What should happen when there are multiple interfaces with the same address.  When I have two tunnels configured they show up as (eg)
> 
> tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1398
>        options=80000<LINKSTATE>
>        inet 10.0.5.1 --> 10.0.0.31 netmask 0xffffffff
>        Opened by PID 12616
> 
> tun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1398
>        options=80000<LINKSTATE>
>        inet 10.0.5.1 --> 10.0.0.32 netmask 0xffffffff
>        Opened by PID 12630
> 
> If the loop back address is 10.0.5.1 and closing one of them deletes the loopback what should happen?  Should it delete all routes that refer to 10.0.5.1?



More information about the freebsd-net mailing list