debian/ubuntu/windows设置wiregurad内网服务器(包含掉线自启动) ...

立山  金牌会员 | 2024-6-13 21:27:24 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 579|帖子 579|积分 1737

前言

本文主要用来讲解怎样设置wireguard服务器、客户端及掉线自启动的全套流程。
WireGuard 是一种轻量级的捏造专用网协议,旨在提供快速、安全、简朴的网络连接。它是由 Jason Donenfeld 在 2015 年发明的,并于 2018 年正式发布。
WireGuard 与其他常见的协议相比,有很多优点,如更小的代码库、更快的速度、更低的体系资源斲丧、更简朴的架构和更安全的加密方式。它通常用于个人电脑、服务器、移动设备等,可以资助用户保护其在线隐私、提高网络安全性、排除网络限定等。
WireGuard 使用了本身的加密协议,使用了高效的数据包格式和高效的握手机制,可以提高网络速度和效率。它还使用了新型的密钥管理方式,可以更快地完成握手和通讯。
总的来说,WireGuard 是一种非常优秀的协议,它提供了快速、安全、简朴的网络连接,可以资助用户保护其在线隐私、提高网络安全性、排除网络限定等。
IPsec 和 Open微皮恩等大多数其他解决方案是几十年前开辟的。安全研究人员和内核开辟人员 Jason Donenfeld 意识到它们速度慢且难以正确设置和管理。
这让他创建了一个新的开源 微皮恩协议和解决方案,它更加速速、安全、易于部署和管理。
WireGuard 最初是为 Linux 开辟的,但现在可用于 Windows、macOS、BSD、iOS 和 Android。它仍在活泼开辟中。
除了可以跨平台之外,WireGuard 的最大优点之一就是易于部署。设置和部署 WireGuard 就像设置和使用 SSH 一样容易。
一、服务器设置

安装wireguard软件

  1. sudo apt update && sudo apt install wireguard
复制代码
现在 WireGuard 已经被归并到 Linux 5.6 内核中了,如果你的内核版本 >= 5.6,就可以用上原生的 WireGuard 了,只需要安装 wireguard-tools 即可,内核版本<5.6,可能需要起首更新内核,否则可能会报错:Unable to access interface: Protocol not supported
天生私钥公钥

  1. wg genkey | sudo tee /etc/wireguard/privatekey-wg0 | wg pubkey | sudo tee /etc/wireguard/publickey-wg0
复制代码
天生的密钥保存在/etc/wireguard/privatekey-wg0和/etc/wireguard/publickey-wg0中
设置服务器参数

  1. #创建,编辑配置文件
  2. sudo touch /etc/wireguard/wg0.conf
  3. sudo nano /etc/wireguard/wg0.conf
复制代码
粘贴如下:
  1. [Interface]
  2. Address = 10.100.1.1/24
  3. SaveConfig = true
  4. PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  5. PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
  6. ListenPort = 51800
  7. PrivateKey = SERVER_PRIVATE_KEY  #服务器端生成的私钥
复制代码
使用/etc/wireguard/privatekey-wg0中的值替换SERVER_PRIVATE_KEY
使用如下命令获取网卡名称,替换eth0
ip -o -4 route show to default | awk '{print $5}'
如果希望这个客户端只能访问内网,则设置如下,抛弃全部非10.100.1.0网段的哀求
  1. PostUp = iptables -A FORWARD -p all -i wg0 ! -d 10.100.1.0/24 -j DROP
  2. PostDown = iptables -D FORWARD -p all -i wg0 ! -d 10.100.1.0/24 -j DROP
复制代码
这里附上博主搜索到两篇对于iptables整理的比较好的文章,一并附上
   CSDN - Linux iptables 防火墙软件命令详解
CSDN - iptables学习条记
  如果想要设置多个端口服务,可天生如/etc/wireguard/privatekey-wg1和/etc/wireguard/publickey-wg1的密钥,增加wg1.conf后按照原流程即可。
设置服务器sysctl参数

如果要正常使用wg0的转发,需要启用电脑的ip转发,使用你喜好的编辑器打开文件/etc/sysctl.conf
添加或者取消注释行net.ipv4.ip_forward=1
使用sudo sysctl -p 应用修改
启动、制止服务端

  1. #启动服务端
  2. $ sudo wg-quick up wg0
  3. ## 输出如下
  4. [#] ip link add wg0 type wireguard
  5. [#] wg setconf wg0 /dev/fd/63
  6. [#] ip -4 address add 10.100.1.1/24 dev wg0
  7. [#] ip link set mtu 1420 up dev wg0
  8. [#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
复制代码
  1. # 停止服务端
  2. $ sudo wg-quick down wg0
  3. ## 输出如下
  4. [#] wg showconf wg0
  5. [#] ip link delete dev wg0
  6. [#] iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
复制代码
校验服务端状态:
  1. sudo wg
  2. ## 输出
  3. interface: wg0
  4.   public key: ********************
  5.   private key: (hidden)
  6.   listening port: 51800
复制代码
二、用户端设置

安装wireguard软件

软件官方下载连接:www.wireguard.com

由于greatwall的存在,可以关注微信公众号:机器人梦想家下载。

windows 64位安装 *amd64.msi
windows 32位安装 *x86.msi
windows arm安装 *arm64.msi
安卓安装 *.apk
ubuntu或debian使用命令安装sudo apt-get install wireguard
天生私钥公钥

使用wiregurad的工具wg genkey和wg pubkey天生公钥和私钥并保存在/etc/wireguard/目录。windows会自动天生,记下来即可。
  1. wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
复制代码
设置客户端参数

  1. #创建,编辑配置文件
  2. sudo touch /etc/wireguard/wg0.conf
  3. sudo nano /etc/wireguard/wg0.conf
复制代码
粘贴如下:
  1. [Interface]
  2. PrivateKey = CLIENT_PRIVATE_KEY  #客户端生成的私钥
  3. Address = 10.100.1.2/32 #改为想给本机分配的ip
  4. [Peer]
  5. PublicKey = SERVER_PUBLIC_KEY  #服务器端生成的公钥
  6. Endpoint = SERVER_IP_ADDRESS:51800  #服务器的公网IP和端口
  7. AllowedIPs = 10.100.1.0/24        #这里是限制只有10.100.1 网段的请求走WireGuard,不影响其它应用上网,设为0.0.0.0/0则是所有请求均走WireGuard
  8. PersistentKeepalive = 120        #握手时间,每隔120s ping一次客户端
复制代码
替换其中的CLIENT_PRIVATE_KEY、SERVER_PUBLIC_KEY、SERVER_IP_ADDRESS,按照本身本地天生的设置
多台client注意修改Address为不同的ip地点。
启动、制止客户端

  1. #启动客户端
  2. $ sudo wg-quick up wg0
  3. ## 输出如下
  4. [#] ip link add wg0 type wireguard
  5. [#] wg setconf wg0 /dev/fd/63
  6. [#] ip -4 address add 10.100.1.1/24 dev wg0
  7. [#] ip link set mtu 1420 up dev wg0
  8. [#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
复制代码
  1. # 停止客户端
  2. $ sudo wg-quick down wg0
  3. ## 输出如下
  4. [#] wg showconf wg0
  5. [#] ip link delete dev wg0
  6. [#] iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
复制代码
设置服务开机启动

  1. sudo systemctl enable wg-quick@wg0
  2. sudo systemctl start wg-quick@wg0
复制代码
可以通过下边指令检查服务运行状态:
  1. sudo systemctl status wg-quick@wg0
复制代码
三、服务器添加、删除客户

  1. # 添加客户端
  2. sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.100.1.2
  3. #删除客户端
  4. sudo wg set wg0 peer CLIENT_PUBLIC_KEY remove
复制代码
可以通过在服务器端运行sudo wg查看client状态
  1. sudo wg
  2. ## 输出
  3. interface: wg0
  4.   public key: ***********************
  5.   private key: (hidden)
  6.   listening port: 51800
  7. peer: ***********************
  8.   endpoint: *.*.*.*:36875
  9.   allowed ips: 10.100.1.2/32
  10.   latest handshake: 10 seconds ago
  11.   transfer: 392 B received, 184 B sent
复制代码
四、设置掉线自启动

设置掉线自启动脚本

掉线自启动一般只需要设置客户端
新建脚本,用于检测是否掉线
  1. touch /home/dev/Documents/pingwireguard.sh
  2. chmod +x /home/dev/Documents/pingwireguard.sh
  3. vim /home/dev/Documents/pingwireguard.sh
复制代码
粘贴如下:
  1. #!/bin/sh
  2. if ! ping -c 3 10.100.1.1 > /dev/null 2>&1 ;then
  3. echo `date` " The network is down! Now try restarting wg0!\n"
  4. sudo systemctl restart wg-quick@wg0.service
  5. else
  6. echo `date` "Wireguard network is alive.\n"
  7. fi
复制代码
设置定时程序

这里使用crontab定时呼叫校验脚本
  1. $ crontab -e
复制代码
每隔10min执行一遍校验网络是否通畅,增加条如下:
  1. */10 * * * *  /home/dev/Documents/pingwireguard.sh
复制代码
设置脚本sudo免密执行权限

  1. sudo visudo
  2. ## 增加如下,dev是你本地运行crontab的用户名
  3. %dev ALL=(ALL:ALL) NOPASSWD :/bin/systemctl restart wg-quick@wg0.service
复制代码
请注意用户是否有执行root的权限,若没有同时增加如下这句
  1. sudo visudo
  2. #
  3. # This file MUST be edited with the 'visudo' command as root.
  4. #
  5. # Please consider adding local content in /etc/sudoers.d/ instead of
  6. # directly modifying this file.
  7. #
  8. # See the man page for details on how to write a sudoers file.
  9. #
  10. Defaults        env_reset
  11. Defaults        mail_badpass
  12. Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  13. # Host alias specification
  14. # User alias specification
  15. # Cmnd alias specification
  16. # User privilege specification
  17. root    ALL=(ALL:ALL) ALL
  18. ## 为你的用户增加sudo权限, 注意dev修改为你本地运行crontab的用户
  19. dev     ALL=(ALL:ALL) ALL
  20. # Allow members of group sudo to execute any command
  21. %sudo   ALL=(ALL:ALL) ALL
  22. ## 增加如下, 注意dev修改为你本地运行crontab的用户名
  23. %dev ALL=(ALL:ALL) NOPASSWD :/bin/systemctl restart wg-quick@wg0.service
  24. # See sudoers(5) for more information on "@include" directives:
  25. @includedir /etc/sudoers.d
  26. admin ALL=(ALL)  NOPASSWD:ALL
复制代码
判定crontab是否执行

  1. # 判定之前运行环境sudo tail -f /var/log/syslog | grep CRON# ==========OUT PUT==========# Nov 17 16:25:01 debian11 CRON[5863]: (dev) CMD (/home/dev/Documents/pingwireguard.sh >> /home/dev/Documents/crontab.log 2>&1)# 输出运行过程到日志*/10 * * * *  /home/dev/Documents/pingwireguard.sh
  2. >> /home/dev/Documents/crontab.log 2>&1
复制代码
Debian10 Wirguard通过apt安装报错及解决

报错

正常安装后运行报错如下:
  1. $ sudo wg-quick up wg0
  2. #================== OUT PUT ========================
  3. [#] ip link add wg0 type wireguard
  4. RTNETLINK answers: Operation not supported
  5. Unable to access interface: Protocol not supported
  6. [#] ip link delete dev wg0
  7. Cannot find device "wg0"
复制代码
解决

需要安装Debian Backports(在支持的Debian稳固版本上提供了具有新功能的新软件包)1,安装方式如下:
Add Backports to sources.list
  1. echo "deb http://deb.debian.org/debian buster-backports main" | sudo tee /etc/apt/sources.list.d/buster-backports.list
复制代码
这里的buster可以替换为你当前版本。
之后通过下述方式安装:
  1. sudo apt update
  2. sudo apt -t buster-backports install wireguard wireguard-tools wireguard-dkms linux-headers-$(uname -r)
复制代码
等安装完成后就可以成功运行了。
末端

至此竣事全部的设置,本文参考大量的博客进行汇总,终极得到一套比较简朴能够设置的方法可以应用于工程实际环境,希望能对大家起到一些资助。

   

  • Set Up Your Own WireGuard VPN Server on Debian 11 & Debian 10 - LinuxBabe ↩︎

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立山

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表