diff options
-rw-r--r-- | sysconfig.txt | 7 | ||||
-rwxr-xr-x | sysconfig/network-scripts/ifup-tunnel | 14 |
2 files changed, 15 insertions, 6 deletions
diff --git a/sysconfig.txt b/sysconfig.txt index 8f347cb7..0b1b500c 100644 --- a/sysconfig.txt +++ b/sysconfig.txt @@ -931,7 +931,12 @@ Files in /etc/sysconfig/network-scripts/ "mode=active-backup arp_interval=60 arp_ip_target=192.168.1.1,192.168.1.2" Tunnel-specific items: - TYPE=GRE|IPIP|IPIP6 + TYPE=GRE|IPIP|IPIP6|EXTERNAL + External is a mode for ip6_tunnel interfaces (that cannot be set on + the primary ip6tnl0 interface), which permits unwrapping encapsulated + packets regardless of their internal IP (v4 or v6) provided the inner + address is on the interface. Use $MY_INNER_IPADDR for v4 addresses. Use + $IPV6ADDR and $IPV6ADDR_SECONDARIES as usual for v6 addresses. MY_INNER_IPADDR=local IP address of the tunnel interface PEER_OUTER_IPADDR=IP address of the remote tunnel endpoint MY_OUTER_IPADDR=IP address of the local tunnel endpoint diff --git a/sysconfig/network-scripts/ifup-tunnel b/sysconfig/network-scripts/ifup-tunnel index 5a1df54c..afdfe928 100755 --- a/sysconfig/network-scripts/ifup-tunnel +++ b/sysconfig/network-scripts/ifup-tunnel @@ -47,7 +47,7 @@ IPIP) proto=-4 /sbin/modprobe ipip ;; -IPIP6) +IPIP6|EXTERNAL) MODE=ipip6 proto=-6 /sbin/modprobe ip6_tunnel @@ -66,10 +66,14 @@ fi # Create the tunnel # The outer addresses are those of the underlying (public) network. -/sbin/ip $proto tunnel add "$DEVICE" mode "$MODE" \ - ${MY_OUTER_IPADDR:+local "$MY_OUTER_IPADDR"} \ - ${PEER_OUTER_IPADDR:+remote "$PEER_OUTER_IPADDR"} \ - ${KEY:+key "$KEY"} ${TTL:+ttl "$TTL"} +if [ "$TYPE" = 'EXTERNAL' ]; then + /sbin/ip link add "$DEVICE" type ip6tnl external +else + /sbin/ip $proto tunnel add "$DEVICE" mode "$MODE" \ + ${MY_OUTER_IPADDR:+local "$MY_OUTER_IPADDR"} \ + ${PEER_OUTER_IPADDR:+remote "$PEER_OUTER_IPADDR"} \ + ${KEY:+key "$KEY"} ${TTL:+ttl "$TTL"} +fi if [ -n "$MTU" ]; then /sbin/ip link set "$DEVICE" mtu "$MTU" |