#!/bin/bash set -x set -e [ -f /root/strongswan-config ] && . /root/strongswan-config ||: ETC=${ETC:=/etc/strongswan} SWAND="$ETC/strongswan.d" IPSECD="$ETC/ipsec.d" SWANC="$ETC/swanctl" NOWSEC=`date +%s` SWAN_LIBX=${SWAN_LIBX:=/usr/libexec/strongswan} [ -d $SWAN_LIBX ] || { echo "SWAN_LIBX $SWAN_LIBX not found. Plese set SWAN_LIBX in /root/strongswan-config" exit 1 } export LD_LIBRARY_PATH="$SWAN_LIBX:$LD_LIBRARY_PATH" WAN_IF=${WAN_IF:=eth1} WAN_IP=${WAN_IP:=10.1.99.1} WAN_CONCENTRATOR_IP=${WAN_CONCENTRATOR_IP:=10.1.99.1} XIF_IP=${XIF_IP:=10.9.99.1} function initialize_vrf() { local WANDEV=$WAN_IF local VRFID=$1 local VRFDEV=vrf$VRFID local XFRMDEV=xfrm$VRFID # do you need this? #sysctl -w net.ipv4.ip_forward=1 #sysctl -w net.ipv4.conf.all.rp_filter=0 # setup vrf ip link add $VRFDEV type vrf table $VRFID ip link set dev $VRFDEV up ip route add unreachable default metric 4278198272 vrf $VRFDEV # create tunnel device ip li del $XFRMDEV >/dev/null 2>&1 $SWAN_LIBX/xfrmi -n $XFRMDEV -i $VRFID -d $WANDEV ip li set dev $XFRMDEV up ip li set dev $XFRMDEV master $VRFDEV ip add add 169.254.24.201/32 dev $XFRMDEV scope link ip ro add default dev $XFRMDEV vrf $VRFDEV ip -6 ro add default dev $XFRMDEV vrf $VRFDEV } function initialize_fake_client_netns() { local VRFID=$1 sysctl net.ipv4.conf.all.rp_filter=0 sysctl net.ipv4.conf.default.rp_filter=0 ip netns add ts-vrf-${VRFID} ip netns exec ts-vrf-${VRFID} ip li set dev lo up ip li del ts-vrf-${VRFID}a ip link add ts-vrf-${VRFID}a type veth peer name ts-vrf-${VRFID}b netns ts-vrf-${VRFID} ip netns exec ts-vrf-${VRFID} ip link set dev ts-vrf-${VRFID}b up ip netns exec ts-vrf-${VRFID} ip add add dev ts-vrf-${VRFID}b 10.0.201.2/24 ip netns exec ts-vrf-${VRFID} ip ro add default via 10.0.201.1 ip li set dev ts-vrf-${VRFID}a up ip li set dev ts-vrf-${VRFID}a master vrf${VRFID} ip add add 10.0.201.1/24 dev ts-vrf-${VRFID}a } function initialize() { [ -d "$SWANC/peers-available" ] || mkdir "$SWANC/peers-available" [ -d "$SWANC/peers-enabled" ] || mkdir "$SWANC/peers-enabled" [ -f "$SWANC/secrets.conf" ] || touch "$SWANC/secrets.conf" systemctl enable strongswan systemctl daemon-reload systemct start strongswan || { journalctl -xe } } function vrf_ping() { local vrfid=$1 ip netns exec ts-vrf-$vrfid ping 10.0.201.2 } function backup_keys() { if [ -f $SWANC/secrets.conf ]; then cp $SWANC/secrets.conf $SWANC/.secrets.conf.$NOWSEC fi } function deactivate_peer() { [ -e "$SWANC/peers-enabled/${1}.conf" ] || { if [ -e "$SWANC/peers-available/${1}.conf" ]; then echo "Peer $1 deactivated." else echo "No peer config at $SWANC/peers-available/${1}.conf" fi exit 0 } echo -n "Deactivating $1..." rm "$SWANC/peers-enabled/${1}.conf" swanctl --load-all echo "done" } function activate_peer() { [ -f "$SWANC/peers-available/${1}.conf" ] || { echo "No peer config at $SWANC/peers-available/${1}.conf" exit 1 } if [ -e "$SWANC/peers-enabled/${1}.conf" ]; then echo "Peer $1 actiated." else echo -n "Activating $1..." ln -s" $SWANC/peers-available/${1}.conf" "$SWANC/peers-enabled/" swanctl --load-all echo "done" fi } function create_station_peer() { if [ -f "$SWANC/peers-available/${1}.conf" ]; then echo "Peer $1 config already exists." return; fi cat > "$SWANC/peers-available/${1}.conf" <> "$SWANC/secrets.conf" <