wireguard服务器配置

用FileZilla连接主机时,出现无法连接服务器的错误(ip、用户名和密码都无误,ssh也能正常连接)
好奇怪的错误。。。
后来发现端口号需要设置为22就可以了🐂
在这里插入图片描述

虚拟主机连接好之后,先运行下面这个指令来更新主机的配置软件:

apt-get update -y && apt-get install curl -y

#!/bin/bash

rand(){
    min=$1
    max=$(($2-$min+1))
    num=$(cat /dev/urandom | head -n 10 | cksum | awk -F ' ' '{print $1}')
    echo $(($num%$max+$min))  
}

wireguard_install(){
    version=$(cat /etc/os-release | awk -F '[".]' '$1=="VERSION="{print $2}')
    if [ $version == 18 ]; then
        sudo apt-get update -y
        sudo apt-get install -y software-properties-common
        sudo apt-get install -y openresolv
    #else
     #   sudo apt-get update -y
      #  sudo apt-get install -y software-properties-common
    fi
    #sudo add-apt-repository -y ppa:wireguard/wireguard
    sudo apt-get update -y
    sudo apt-get install -y wireguard curl

    sudo echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf
    sysctl -p
    echo "1"> /proc/sys/net/ipv4/ip_forward
    
    mkdir /etc/wireguard
    cd /etc/wireguard
    wg genkey | tee sprivatekey | wg pubkey > spublickey
    wg genkey | tee cprivatekey | wg pubkey > cpublickey
    s1=$(cat sprivatekey)
    s2=$(cat spublickey)
    c1=$(cat cprivatekey)
    c2=$(cat cpublickey)
    serverip=$(curl ipv4.icanhazip.com)
    port=$(rand 10000 60000)
    eth=$(ls /sys/class/net | awk '/^e/{print}')

sudo cat > /etc/wireguard/wg0.conf <<-EOF
[Interface]
PrivateKey = $s1
Address = 10.0.0.1/24 
PostUp   = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = $port
DNS = 8.8.8.8
MTU = 1420

[Peer]
PublicKey = $c2
AllowedIPs = 10.0.0.2/32
EOF


sudo cat > /etc/wireguard/client.conf <<-EOF
[Interface]
PrivateKey = $c1
Address = 10.0.0.2/24 
DNS = 8.8.8.8
MTU = 1420

[Peer]
PublicKey = $s2
Endpoint = $serverip:$port
AllowedIPs = 0.0.0.0/0, ::0/0
PersistentKeepalive = 25
EOF

    sudo apt-get install -y qrencode

sudo cat > /etc/init.d/wgstart <<-EOF
#! /bin/bash
### BEGIN INIT INFO
# Provides:		wgstart
# Required-Start:	$remote_fs $syslog
# Required-Stop:    $remote_fs $syslog
# Default-Start:	2 3 4 5
# Default-Stop:		0 1 6
# Short-Description:	wgstart
### END INIT INFO
sudo wg-quick up wg0
EOF

    sudo chmod +x /etc/init.d/wgstart
    cd /etc/init.d
    if [ $version == 14 ]
    then
        sudo update-rc.d wgstart defaults 90
    else
        sudo update-rc.d wgstart defaults
    fi
    
    sudo wg-quick up wg0
    
    content=$(cat /etc/wireguard/client.conf)
    echo -e "\033[43;42m电脑端请下载/etc/wireguard/client.conf,手机端可直接使用软件扫码\033[0m"
    echo "${content}" | qrencode -o - -t UTF8
}

wireguard_remove(){

    sudo wg-quick down wg0
    sudo apt-get remove -y wireguard
    sudo rm -rf /etc/wireguard

}

add_user(){
    echo -e "\033[37;41m给新用户起个名字,不能和已有用户重复\033[0m"
    read -p "请输入用户名:" newname
    cd /etc/wireguard/
    cp client.conf $newname.conf
    wg genkey | tee temprikey | wg pubkey > tempubkey
    ipnum=$(grep Allowed /etc/wireguard/wg0.conf | tail -1 | awk -F '[ ./]' '{print $6}')
    newnum=$((10#${ipnum}+1))
    sed -i 's%^PrivateKey.*$%'"PrivateKey = $(cat temprikey)"'%' $newname.conf
    sed -i 's%^Address.*$%'"Address = 10.0.0.$newnum\/24"'%' $newname.conf

cat >> /etc/wireguard/wg0.conf <<-EOF
[Peer]
PublicKey = $(cat tempubkey)
AllowedIPs = 10.0.0.$newnum/32
EOF
    wg set wg0 peer $(cat tempubkey) allowed-ips 10.0.0.$newnum/32
    echo -e "\033[37;41m添加完成,文件:/etc/wireguard/$newname.conf\033[0m"
    rm -f temprikey tempubkey
}

#开始菜单
start_menu(){
    clear
    echo -e "\033[43;42m ====================================\033[0m"
    echo -e "\033[43;42m 介绍:wireguard一键脚本              \033[0m"
    echo -e "\033[43;42m 系统:Ubuntu                        \033[0m"
    echo -e "\033[43;42m 作者:A                    \033[0m"
    echo -e "\033[43;42m ====================================\033[0m"
    echo
    echo -e "\033[0;33m 1. 安装wireguard\033[0m"
    echo -e "\033[0;33m 2. 查看客户端二维码\033[0m"
    echo -e "\033[0;31m 3. 删除wireguard\033[0m"
    echo -e "\033[0;33m 4. 增加用户\033[0m"
    echo -e " 0. 退出脚本"
    echo
    read -p "请输入数字:" num
    case "$num" in
    1)
    wireguard_install
    ;;
    2)
    content=$(cat /etc/wireguard/client2.conf)
    echo "${content}" | qrencode -o - -t UTF8
    ;;
    3)
    wireguard_remove
    ;;
    4)
    add_user
    ;;
    0)
    exit 1
    ;;
    *)
    clear
    echo -e "请输入正确数字"
    sleep 2s
    start_menu
    ;;
    esac
}

start_menu

把上述内容存为wireguard_install_ubuntu.sh文件

./wireguard_install_ubuntu.sh

在这里插入图片描述
会有该界面出现。根据需要选择。

参考的是这篇博客wireguard服务器搭建
但该博客提供的sh文件不太适用,我稍作了一些个改动。

如何领取GitHub教育优惠礼包

遇到报错:
/usr/bin/wg-quick: line 32: resolvconf: command not found
sudo apt install openresolv

要在Linux上安装WireGuard,需要执行以下步骤: 1. 安装WireGuard软件包 在Ubuntu或Debian上,可以使用以下命令安装WireGuard: ``` sudo apt-get install wireguard ``` 在Fedora上,可以使用以下命令安装WireGuard: ``` sudo dnf install wireguard-tools ``` 在Arch Linux上,可以使用以下命令安装WireGuard: ``` sudo pacman -S wireguard-tools ``` 2. 生成密钥对 要使用WireGuard,您需要生成一个公钥和一个私钥。可以使用以下命令生成它们: ``` wg genkey | tee privatekey | wg pubkey > publickey ``` 这将生成一个名为“privatekey”的文件,其中包含私钥,以及一个名为“publickey”的文件,其中包含公钥。 3. 创建WireGuard配置文件 创建一个名为“wg0.conf”的文件,其中包含以下内容: ``` [Interface] PrivateKey = <your private key> Address = <your VPN IP address> DNS = <your DNS server> [Peer] PublicKey = <server's public key> Endpoint = <server's IP address>:<server's listen port> AllowedIPs = 0.0.0.0/0 ``` 将“<your private key>”替换为您生成的私钥,“<your VPN IP address>”替换为您要使用的VPN IP地址,“<your DNS server>”替换为您要使用的DNS服务器。 将“<server's public key>”替换为服务器的公钥,“<server's IP address>”替换为服务器的IP地址,“<server's listen port>”替换为服务器的监听端口。 4. 启动WireGuard 要启动WireGuard,可以使用以下命令: ``` sudo wg-quick up wg0 ``` 这将启动名为“wg0”的WireGuard接口。如果一切正常,您应该可以通过ping测试连接。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值