72 lines
2.1 KiB
Bash
72 lines
2.1 KiB
Bash
#!/bin/bash
|
|
|
|
# Function to display usage
|
|
usage() {
|
|
echo "Usage: $0 -c <client_config_file>"
|
|
echo "Example: $0 -c peer1.conf"
|
|
exit 1
|
|
}
|
|
|
|
# Parse command-line arguments
|
|
while getopts ":c:" opt; do
|
|
case $opt in
|
|
c) CLIENT_CONF="$OPTARG" ;;
|
|
*) usage ;;
|
|
esac
|
|
done
|
|
|
|
# Validate inputs
|
|
if [[ -z "$CLIENT_CONF" ]]; then
|
|
echo "Error: Missing client configuration file."
|
|
usage
|
|
fi
|
|
|
|
# Check if WireGuard is installed
|
|
if ! command -v wg &> /dev/null; then
|
|
echo "WireGuard is not installed. Installing WireGuard..."
|
|
# Install WireGuard based on the Linux distribution
|
|
if command -v apt &> /dev/null; then
|
|
sudo apt update
|
|
sudo apt install -y wireguard resolvconf
|
|
elif command -v yum &> /dev/null; then
|
|
sudo yum install -y wireguard-tools
|
|
elif command -v dnf &> /dev/null; then
|
|
sudo dnf install -y wireguard-tools
|
|
elif command -v pacman &> /dev/null; then
|
|
sudo pacman -S --noconfirm wireguard-tools
|
|
else
|
|
echo "Unsupported package manager. Please install WireGuard manually."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Check if resolvconf is installed (required for DNS configuration)
|
|
if grep -q "DNS" "$CLIENT_CONF" && ! command -v resolvconf &> /dev/null; then
|
|
echo "Error: 'resolvconf' is not installed, but DNS is configured in $CLIENT_CONF."
|
|
echo "To fix this, either:"
|
|
echo "1. Install resolvconf: sudo apt install resolvconf"
|
|
echo "2. Remove the 'DNS' line from $CLIENT_CONF"
|
|
exit 1
|
|
fi
|
|
|
|
# Create the WireGuard configuration directory if it doesn't exist
|
|
WG_CLIENT_DIR="/etc/wireguard"
|
|
sudo mkdir -p "$WG_CLIENT_DIR"
|
|
|
|
# Copy the client configuration file to the WireGuard directory
|
|
CLIENT_CONF_NAME=$(basename "$CLIENT_CONF")
|
|
sudo cp "$CLIENT_CONF" "$WG_CLIENT_DIR/$CLIENT_CONF_NAME"
|
|
|
|
# Start the WireGuard interface
|
|
INTERFACE_NAME="${CLIENT_CONF_NAME%.conf}"
|
|
echo "Starting WireGuard interface $INTERFACE_NAME..."
|
|
sudo wg-quick up "$INTERFACE_NAME"
|
|
|
|
# Check if the interface is up
|
|
if ip a show "$INTERFACE_NAME" &> /dev/null; then
|
|
echo "WireGuard interface $INTERFACE_NAME is up and running!"
|
|
echo "You are now connected to the WireGuard server."
|
|
else
|
|
echo "Failed to start WireGuard interface $INTERFACE_NAME. Check logs for details."
|
|
fi
|