Linux NetworkManager IPv6 Tunnel Config

From AAISP Support Site
Revision as of 16:35, 17 November 2015 by PhilR (talk | contribs) (How to create a tunnel for a NetworkManager controlled connection)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

If you've tried all the listed methods of creating a 6in4 tunnel and found them unreliable or not working, it could be NetworkManager interfering with your setup - this is often the case if you want the tunnel to work with your 3G connection.

One workaround would be to set it up like this - this was done on Debian jessie, but should be similar for others:

First, find the name of the connection file in /etc/NetworkManager/system-connections - in my case it's "Andrews & Arnold connection" - the name is passed to NM Dispatcher scripts in $CONNECTION_ID and will be used in the example below.

In /etc/NetworkManager/dispatcher.d, create the file 99smart6in4.sh, containing the following:

#!/bin/sh
STATUS=$2
REMOTE=81.187.81.6
IPADDR=2001:8b0:XXXX:YYYY::1/64 (where XXXX is the third "word" of your /48, and YYYY is the fourth word of a suitable /64)

if [ "$CONNECTION_ID" = "Andrews & Arnold connection" ] && [ "$STATUS" = "up" ]; then
        ip tunnel add 6in4 mode sit remote $REMOTE
        ip link set 6in4 up mtu 1280
        ip addr add $IPADDR dev 6in4
        ip route add ::/0 dev 6in4
fi

if [ "$CONNECTION_ID" = "Andrews & Arnold connection" ] && [ "$STATUS" = "down" ]; then
        ip link set 6in4 down
        ip tunnel del 6in4
fi

This should give you IPv6 on the connection in question, and tear the tunnel down when you are not using it so that native IPv6 will work on other connections.