#!/bin/sh -e # Dynamic Multipoint VPN setup script for Alpine Linux # Copyright (c) 2017-2018 Kaarle Ritvanen # See LICENSE file for license details . /lib/libalpine.sh if [ -z "$1" ]; then echo "Usage: $0 " >&2 exit 1 fi ATTRS=$(/usr/libexec/dmvpn-pfx-decode "$1") eval $ATTRS for attr in GRE_IPV4_ADDRESS HUBS VPNC_TYPE; do eval "[ \"\$$attr\" ]" || die "attribute not defined: $attr" done ask "NHRP network ID" 1 NHRP_ID=$resp NFLOG_GROUP= if [ $VPNC_TYPE = hub ]; then ask "NFLOG group" 1 NFLOG_GROUP=$resp ask "DMVPN site IPv4 prefix length" 16 SITE_PREFIX_LEN_IPV4=$resp if [ "$GRE_IPV6_ADDRESS" ]; then ask "DMVPN site IPv6 prefix length" 48 SITE_PREFIX_LEN_IPV6=$resp fi fi PMTU_SYSCTL=net.ipv4.ip_forward_use_pmtu get_dev() { sed -E "s/^$* (.+ )?dev ([^ ]+)( .+)?\$/\\2/;ta;d;:a" } get_local_dev() { ip route list table local | get_dev local $1 } enable_service() { rc-update add $1 rc-service $1 start } enable_firewall() { augtool -s < /dev/null; then host $h | sed -E 's/^.+ has address //;ta;d;:a' else echo $h fi done | while read addr; do if [ -z "$(get_local_dev $addr)" ]; then ip route get $addr | get_dev $addr break fi done) TRANSPORT_IFACE=$resp i=1 while [ -d /sys/class/net/gre$i ]; do : $(( i++ )) done ask "GRE tunnel interface" gre$i GRE_IFACE=$resp echo "$PMTU_SYSCTL = 1" > /etc/sysctl.d/dmvpn.conf sysctl -w $PMTU_SYSCTL=1 cat >> /etc/network/interfaces <> /etc/network/interfaces < /etc/awall/dmvpn.json < /etc/nhrp-events.conf <> /etc/nhrp-events.conf <