Support ipv4 endpoint and ipv6 endpoint.

This commit is contained in:
Alex-Joe-Lee 2023-08-25 15:00:00 +08:00
parent 39caf2fcf6
commit 7ca2f61e6a

View File

@ -109,13 +109,9 @@ function installQuestions() {
echo "You can keep the default options and just press enter if you are ok with them." echo "You can keep the default options and just press enter if you are ok with them."
echo "" echo ""
# Detect public IPv4 or IPv6 address and pre-fill for the user # Get public IPv4 and IPv6 address and pre-fill for the user
SERVER_PUB_IP=$(ip -4 addr | sed -ne 's|^.* inet \([^/]*\)/.* scope global.*$|\1|p' | awk '{print $1}' | head -1) SERVER_PUB_IPv4=$(curl -4 https://ifconfig.co)
if [[ -z ${SERVER_PUB_IP} ]]; then SERVER_PUB_IPv6=$(curl -6 https://ifconfig.co)
# Detect public IPv6 address
SERVER_PUB_IP=$(ip -6 addr | sed -ne 's|^.* inet6 \([^/]*\)/.* scope global.*$|\1|p' | head -1)
fi
read -rp "IPv4 or IPv6 public address: " -e -i "${SERVER_PUB_IP}" SERVER_PUB_IP
# Detect public interface and pre-fill for the user # Detect public interface and pre-fill for the user
SERVER_NIC="$(ip -4 route ls | grep default | grep -Po '(?<=dev )(\S+)' | head -1)" SERVER_NIC="$(ip -4 route ls | grep default | grep -Po '(?<=dev )(\S+)' | head -1)"
@ -215,7 +211,8 @@ function installWireGuard() {
SERVER_PUB_KEY=$(echo "${SERVER_PRIV_KEY}" | wg pubkey) SERVER_PUB_KEY=$(echo "${SERVER_PRIV_KEY}" | wg pubkey)
# Save WireGuard settings # Save WireGuard settings
echo "SERVER_PUB_IP=${SERVER_PUB_IP} echo "SERVER_PUB_IPv4=${SERVER_PUB_IPv4}
SERVER_PUB_IPv6=${SERVER_PUB_IPv6}
SERVER_PUB_NIC=${SERVER_PUB_NIC} SERVER_PUB_NIC=${SERVER_PUB_NIC}
SERVER_WG_NIC=${SERVER_WG_NIC} SERVER_WG_NIC=${SERVER_WG_NIC}
SERVER_WG_IPV4=${SERVER_WG_IPV4} SERVER_WG_IPV4=${SERVER_WG_IPV4}
@ -282,13 +279,15 @@ net.ipv6.conf.all.forwarding = 1" >/etc/sysctl.d/wg.conf
} }
function newClient() { function newClient() {
# If SERVER_PUB_IP is IPv6, add brackets if missing until [[ "${ENDPOINT_TYPE}" == "ipv4" || "${ENDPOINT_TYPE}" == "ipv6" ]]; do
if [[ ${SERVER_PUB_IP} =~ .*:.* ]]; then read -rp "ENDPOINT_TYPE(only support ipv4 or ipv6 input): " -e -i ipv4 ENDPOINT_TYPE
if [[ ${SERVER_PUB_IP} != *"["* ]] || [[ ${SERVER_PUB_IP} != *"]"* ]]; then done
SERVER_PUB_IP="[${SERVER_PUB_IP}]"
fi if [[ ${ENDPOINT_TYPE} == "ipv4" ]]; then
fi ENDPOINT="${SERVER_PUB_IPv4}:${SERVER_PORT}"
ENDPOINT="${SERVER_PUB_IP}:${SERVER_PORT}" else
ENDPOINT="[${SERVER_PUB_IPv6}]:${SERVER_PORT}"
fi
echo "" echo ""
echo "Client configuration" echo "Client configuration"
@ -362,7 +361,8 @@ DNS = ${CLIENT_DNS_1},${CLIENT_DNS_2}
PublicKey = ${SERVER_PUB_KEY} PublicKey = ${SERVER_PUB_KEY}
PresharedKey = ${CLIENT_PRE_SHARED_KEY} PresharedKey = ${CLIENT_PRE_SHARED_KEY}
Endpoint = ${ENDPOINT} Endpoint = ${ENDPOINT}
AllowedIPs = ${ALLOWED_IPS}" >"${HOME_DIR}/${SERVER_WG_NIC}-client-${CLIENT_NAME}.conf" AllowedIPs = ${ALLOWED_IPS}
PersistentKeepalive = 25" >"${HOME_DIR}/${SERVER_WG_NIC}-client-${CLIENT_NAME}.conf"
# Add the client as a peer to the server # Add the client as a peer to the server
echo -e "\n### Client ${CLIENT_NAME} echo -e "\n### Client ${CLIENT_NAME}