1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- #!/bin/bash
- is_serverip6route_set() {
- local server_ip6=${1}
- if [[ -z "${server_ip6}" ]]; then
- return 0
- fi
- if ! ip -6 route | grep -q "^${server_ip6}"; then
- return 1
- fi
- }
- set_serverip6route() {
- local server_ip6=${1}
- local ip6_gw=${2}
- local wired_device=${3}
- ip route add "${server_ip6}/128" via "${ip6_gw}" dev "${wired_device}"
- }
- wired_device=$(ip route | awk '/default via/ { print $5; }')
- # See https://openvpn.net/community-resources/reference-manual-for-openvpn-2-4/#environmental-variables
- # to have a list of variables provided by OpenVPN, i.e:
- # - ifconfig_ipv6_remote
- # - net_gateway_ipv6
- server_ip6=${ifconfig_ipv6_remote}
- ip6_gw=${net_gateway_ipv6}
- echo "[INFO] Autodetected internet interface: ${wired_device}"
- if [[ -n "${server_ip6}" ]]; then
- echo "[INFO] Autodetected IPv6 address for the VPN server: ${server_ip6}"
- else
- echo "[INFO] No IPv6 address for the VPN server detected"
- echo "[INFO] No IPv6 route set"
- exit 0
- fi
- # Set the new server ipv6 route
- if [[ -n "${ip6_gw}" ]]; then
- if ! is_serverip6route_set "${server_ip6}"; then
- set_serverip6route "${server_ip6}" "${ip6_gw}" "${wired_device}"
- fi
- echo "[INFO] Native IPv6 detected"
- echo "[INFO] Autodetected native IPv6 gateway: ${ip6_gw}"
- if is_serverip6route_set "${server_ip6}"; then
- echo "[ OK ] IPv6 server route correctly set"
- else
- echo "[FAIL] No IPv6 server route set" >&2
- exit 1
- fi
- else
- echo "[INFO] No native IPv6 detected"
- echo "[INFO] No IPv6 server route to set"
- fi
|