| #!/bin/bash |
| # SPDX-License-Identifier: GPL-2.0 |
| # Copyright (C) 2020-2025 OpenVPN, Inc. |
| # |
| # Author: Antonio Quartulli <antonio@openvpn.net> |
| |
| #set -x |
| set -e |
| |
| source ./common.sh |
| |
| cleanup |
| |
| modprobe -q ovpn || true |
| |
| for p in $(seq 0 ${NUM_PEERS}); do |
| create_ns ${p} |
| done |
| |
| for p in $(seq 0 ${NUM_PEERS}); do |
| setup_ns ${p} 5.5.5.$((${p} + 1))/24 ${MTU} |
| done |
| |
| for p in $(seq 0 ${NUM_PEERS}); do |
| add_peer ${p} |
| done |
| |
| for p in $(seq 1 ${NUM_PEERS}); do |
| ip netns exec peer0 ${OVPN_CLI} set_peer tun0 ${p} 60 120 |
| ip netns exec peer${p} ${OVPN_CLI} set_peer tun${p} ${p} 60 120 |
| done |
| |
| sleep 1 |
| |
| for p in $(seq 1 ${NUM_PEERS}); do |
| ip netns exec peer0 ping -qfc 500 -w 3 5.5.5.$((${p} + 1)) |
| ip netns exec peer0 ping -qfc 500 -s 3000 -w 3 5.5.5.$((${p} + 1)) |
| done |
| |
| # ping LAN behind client 1 |
| ip netns exec peer0 ping -qfc 500 -w 3 ${LAN_IP} |
| |
| if [ "$FLOAT" == "1" ]; then |
| # make clients float.. |
| for p in $(seq 1 ${NUM_PEERS}); do |
| ip -n peer${p} addr del 10.10.${p}.2/24 dev veth${p} |
| ip -n peer${p} addr add 10.10.${p}.3/24 dev veth${p} |
| done |
| for p in $(seq 1 ${NUM_PEERS}); do |
| ip netns exec peer${p} ping -qfc 500 -w 3 5.5.5.1 |
| done |
| fi |
| |
| ip netns exec peer0 iperf3 -1 -s & |
| sleep 1 |
| ip netns exec peer1 iperf3 -Z -t 3 -c 5.5.5.1 |
| |
| echo "Adding secondary key and then swap:" |
| for p in $(seq 1 ${NUM_PEERS}); do |
| ip netns exec peer0 ${OVPN_CLI} new_key tun0 ${p} 2 1 ${ALG} 0 data64.key |
| ip netns exec peer${p} ${OVPN_CLI} new_key tun${p} ${p} 2 1 ${ALG} 1 data64.key |
| ip netns exec peer${p} ${OVPN_CLI} swap_keys tun${p} ${p} |
| done |
| |
| sleep 1 |
| |
| echo "Querying all peers:" |
| ip netns exec peer0 ${OVPN_CLI} get_peer tun0 |
| ip netns exec peer1 ${OVPN_CLI} get_peer tun1 |
| |
| echo "Querying peer 1:" |
| ip netns exec peer0 ${OVPN_CLI} get_peer tun0 1 |
| |
| echo "Querying non-existent peer 10:" |
| ip netns exec peer0 ${OVPN_CLI} get_peer tun0 10 || true |
| |
| echo "Deleting peer 1:" |
| ip netns exec peer0 ${OVPN_CLI} del_peer tun0 1 |
| ip netns exec peer1 ${OVPN_CLI} del_peer tun1 1 |
| |
| echo "Querying keys:" |
| for p in $(seq 2 ${NUM_PEERS}); do |
| ip netns exec peer${p} ${OVPN_CLI} get_key tun${p} ${p} 1 |
| ip netns exec peer${p} ${OVPN_CLI} get_key tun${p} ${p} 2 |
| done |
| |
| echo "Deleting peer while sending traffic:" |
| (ip netns exec peer2 ping -qf -w 4 5.5.5.1)& |
| sleep 2 |
| ip netns exec peer0 ${OVPN_CLI} del_peer tun0 2 |
| # following command fails in TCP mode |
| # (both ends get conn reset when one peer disconnects) |
| ip netns exec peer2 ${OVPN_CLI} del_peer tun2 2 || true |
| |
| echo "Deleting keys:" |
| for p in $(seq 3 ${NUM_PEERS}); do |
| ip netns exec peer${p} ${OVPN_CLI} del_key tun${p} ${p} 1 |
| ip netns exec peer${p} ${OVPN_CLI} del_key tun${p} ${p} 2 |
| done |
| |
| echo "Setting timeout to 3s MP:" |
| for p in $(seq 3 ${NUM_PEERS}); do |
| ip netns exec peer0 ${OVPN_CLI} set_peer tun0 ${p} 3 3 || true |
| ip netns exec peer${p} ${OVPN_CLI} set_peer tun${p} ${p} 0 0 |
| done |
| # wait for peers to timeout |
| sleep 5 |
| |
| echo "Setting timeout to 3s P2P:" |
| for p in $(seq 3 ${NUM_PEERS}); do |
| ip netns exec peer${p} ${OVPN_CLI} set_peer tun${p} ${p} 3 3 |
| done |
| sleep 5 |
| |
| cleanup |
| |
| modprobe -r ovpn || true |