日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > centos >内容正文

centos

Centos7配置Wireguard

發(fā)布時(shí)間:2023/12/20 centos 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Centos7配置Wireguard 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Centos7配置Wireguard

    • Wireguard服務(wù)端安裝腳本
      • 防火墻策略
    • Wireguard添加客戶端腳本

Wireguard服務(wù)端安裝腳本

#!/usr/bin/env bash# 判斷Linux發(fā)行版 function check_os() {if grep -qs "ubuntu" /etc/os-release; thenos="ubuntu"os_version=$(grep 'VERSION_ID' /etc/os-release | cut -d '"' -f 2 | tr -d '.')elif [[ -e /etc/debian_version ]]; thenos="debian"os_version=$(grep -oE '[0-9]+' /etc/debian_version | head -1)elif [[ -e /etc/almalinux-release || -e /etc/rocky-release || -e /etc/centos-release ]]; thenos="centos"# grep參數(shù)## -s 不顯示錯(cuò)誤信息## -h 不標(biāo)示該列所屬的文件名稱## -o 只輸出文件中匹配到的部分## -E 使用正則表達(dá)式os_version=$(grep -shoE '[0-9]+' /etc/almalinux-release /etc/rocky-release /etc/centos-release | head -1)elif [[ -e /etc/fedora-release ]]; thenos="fedora"os_version=$(grep -oE '[0-9]+' /etc/fedora-release | head -1)elseecho "此安裝程序似乎在不受支持的發(fā)行版上運(yùn)行。 支持的發(fā)行版有 Ubuntu、Debian、AlmaLinux、Rocky Linux、CentOS 和 Fedora。" && exit 1fi }# 判斷Linux版本 function check_os_ver() {if [[ "$os" == "ubuntu" && "$os_version" -lt 1804 ]]; thenecho "使用此安裝程序需要 Ubuntu 18.04 或更高版本。 此版本的 Ubuntu 太舊且不受支持." && exit 1fiif [[ "$os" == "debian" && "$os_version" -lt 10 ]]; thenecho "使用此安裝程序需要 Debian 10 或更高版本。 此版本的 Debian 太舊且不受支持." && exit 1fiif [[ "$os" == "centos" && "$os_version" -lt 7 ]]; thenecho "使用此安裝程序需要 CentOS 7 或更高版本。 此版本的 CentOS 太舊且不受支持." && exit 1fi }# 檢查nftables防火墻 function check_nftables() {if [ "$os" = "centos" ]; thenif grep -qs "hwdsl2 VPN script" /etc/sysconfig/nftables.conf ||systemctl is-active --quiet nftables 2>/dev/null; thenexiterr "此系統(tǒng)啟用了 nftables,但此安裝程序不支持。"fifi }# 安裝前環(huán)境檢查 function check_install_env() {# 先檢查系統(tǒng)發(fā)行版check_os# 檢查Linux版本號(hào)check_os_ver# 檢查是否不受支持的防火墻check_nftables } # 安裝ELRepo function install_ELRepo() {(yum -y install epel-release elrepo-release || echo "yum源錯(cuò)誤,請(qǐng)檢查" && exit 1) &&sed -i "0,/enabled=0/s//enabled=1/" /etc/yum.repos.d/epel.reposed -i "0,/enabled=0/s//enabled=1/" /etc/yum.repos.d/elrepo.repoyum repolist }function install_wg_pkg() {# 安裝wg內(nèi)核模塊和wg-quick命令行yum install -y kmod-wireguard wireguard-tools || dnf install -y wireguard-toolsecho "更新完成" }# 調(diào)整內(nèi)核參數(shù) function tune_kernel() {echo " # 開啟內(nèi)核開啟數(shù)據(jù)包轉(zhuǎn)發(fā) net.ipv4.ip_forward = 1 net.ipv4.conf.all.proxy_arp = 1 " >>/etc/sysctl.conf && sysctl -p}# 加載內(nèi)核模塊 function load_the_wg_kernel_module() {# 在啟動(dòng)時(shí)自動(dòng)加載wireguard模塊echo wireguard >/etc/modules-load.d/wireguard.conf# 加載內(nèi)核模塊,查看模塊是否加載成功modprobe wireguard && lsmod | grep wireguard --color=auto }# 生成服務(wù)端密鑰對(duì) function gen_server_key() {ls /etc/wireguard || mkdir -p /etc/wireguardcd /etc/wireguard/ || exit# 生成服務(wù)器的密鑰對(duì)umask 077 | wg genkey | tee /etc/wireguard/server.privatekey | wg pubkey >/etc/wireguard/server.publickey# 鎖定服務(wù)器的密鑰對(duì),防止誤刪chattr +i /etc/wireguard/server.privatekey /etc/wireguard/server.publickeylsattr /etc/wireguard/server.privatekey /etc/wireguard/server.publickey }# 配置服務(wù)端 function init_wg_server() {# 網(wǎng)卡名eth=$(ls /sys/class/net | awk '/^e/{print}')# 如果已經(jīng)存在wg0.conf文件,就退出代碼ls /etc/wireguard/wg0.conf &>/dev/null && echo "wg0.conf文件已經(jīng)存在" && exit 1# 生成服務(wù)端密鑰對(duì)gen_server_key# 生成wg服務(wù)端配置文件cat <<EOF >/etc/wireguard/wg0.conf [Interface] # 服務(wù)器的私匙,對(duì)應(yīng)客戶端配置中的公匙(自動(dòng)讀取上面剛剛生成的密匙內(nèi)容) PrivateKey = $(cat /etc/wireguard/server.privatekey) # 本機(jī)的內(nèi)網(wǎng)IP地址,一般默認(rèn)即可,除非和你服務(wù)器或客戶端設(shè)備本地網(wǎng)段沖突 Address = 10.89.64.1/24# 運(yùn)行WireGuard時(shí)要執(zhí)行的iptables防火墻規(guī)則,用于打開NAT轉(zhuǎn)發(fā)之類的。 ## 如果不是Ubuntu系統(tǒng),就注釋掉ufw防火墻 #PostUp = ufw route allow in on wg0 out on $eth PostUp = iptables -t nat -I POSTROUTING -o $eth -j MASQUERADE # PostUp = ip6tables -t nat -I POSTROUTING -o $eth -j MASQUERADE# 停止WireGuard時(shí)要執(zhí)行的iptables防火墻規(guī)則,用于關(guān)閉NAT轉(zhuǎn)發(fā)之類的。 ## 如果不是Ubuntu系統(tǒng),就注釋掉ufw防火墻 # PreDown = ufw route delete allow in on wg0 out on $eth PreDown = iptables -t nat -D POSTROUTING -o $eth -j MASQUERADE # PreDown = ip6tables -t nat -D POSTROUTING -o $eth -j MASQUERADE# 服務(wù)端監(jiān)聽端口,可以自行修改 ListenPort = 51820 # SaveConfig確保當(dāng)WireGuard接口關(guān)閉時(shí),任何更改都將保存到配置文件中 SaveConfig = true # 服務(wù)端請(qǐng)求域名解析DNS,可以在本機(jī)搭建dns服務(wù)加快解析 DNS = 1.0.0.1,8.8.4.4 # 服務(wù)端mtu不設(shè)置,為自動(dòng)mtu(默認(rèn)) EOF# 修改配置文件和密鑰文件為600chmod 600 /etc/wireguard/wg0.conf }# Centos7安裝wireguard function install_wireguard() {# 安裝ELRepoinstall_ELRepo# 安裝wg的模塊和包install_wg_pkg# 調(diào)整內(nèi)核參數(shù)tune_kernel# 加載wg內(nèi)核模塊load_the_wg_kernel_module# 配置服務(wù)端init_wg_server# 啟動(dòng)wg-quick@wg0服務(wù)systemctl enable --now wg-quick@wg0 }# Centos7卸載wireguard function remove_wireguard() {# 禁用wireguard開機(jī)自啟服務(wù)systemctl disable --now wg-quick@wg0# 解鎖服務(wù)器的密鑰對(duì)文件chattr -i /etc/wireguard/server.privatekey /etc/wireguard/server.publickey# 刪除wireguard配置即可rm -rf /etc/wireguard/*# 取消開機(jī)自動(dòng)加載wg內(nèi)核模塊rm -rf /etc/modules-load.d/wireguard.conf# 取消sysctl配置--關(guān)閉數(shù)據(jù)包轉(zhuǎn)發(fā)## 刪除net.ipv4.ip_forward行sed -i '/net.ipv4.ip_forward/d' /etc/sysctl.conf &>/dev/null## 刪除net.ipv4.conf.all.proxy_arp行sed -i '/net.ipv4.conf.all.proxy_arp/d' /etc/sysctl.conf &>/dev/null# 數(shù)據(jù)包轉(zhuǎn)發(fā)--熱生效## 1為開啟;0為關(guān)閉echo 0 >/proc/sys/net/ipv4/ip_forwardecho 0 >/proc/sys/net/ipv4/conf/all/proxy_arpecho "卸載完成" }#開始菜單 function start_menu() {# 先進(jìn)行安裝前環(huán)境檢查check_install_envclearecho "========================="echo " 介紹:適用于CentOS7"echo " 作者:Miles"echo " 網(wǎng)站:https://blog.csdn.net/omaidb"echo "========================="echo "注意:本腳本只支持Centos7"echo "1. 安裝wireguard"echo "2. 卸載wireguard"echo "0. 退出腳本"echo "請(qǐng)輸入數(shù)字:"read -r numcase "$num" in1)echo "開始安裝wireguard"install_wireguard;;2)echo "開始卸載wireguard"remove_wireguard;;0)exit 1;;*)clearecho "請(qǐng)輸入正確數(shù)字"sleep 5sstart_menu;;esac }# main方法,顯示菜單 start_menu

防火墻策略

# wg啟動(dòng)前置條件--添加防火墻規(guī)則 PostUp = iptables -I FORWARD -i wg0 -j ACCEPT; iptables -I FORWARD -o wg0 -j ACCEPT; iptables -I INPUT -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE# wg關(guān)閉后置條件--清除防火墻規(guī)則 PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -D INPUT -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Wireguard添加客戶端腳本

#!/usr/bin/env bash# 傳入客戶端名稱 client_name=$1# 獲取公網(wǎng)IP地址 server_public_ip=$(curl -s ipv4.icanhazip.com)# 環(huán)境檢查 function check_env() {## 查看qrencode是否存在which qrencode &>/dev/null || yum install -y qrencode || apt install -y qrencode## 檢查user_conf目錄,不存在就創(chuàng)建ls /etc/wireguard/user_conf/ &>/dev/null || mkdir -p /etc/wireguard/user_conf/# 增加配置之前要先確保啟動(dòng)wg服務(wù)端## shell變量默認(rèn)都是全局變量,local表示為局部變量local resultresult=$(systemctl is-active wg-quick@wg0)if [[ $result != "active" ]]; thenecho "wg服務(wù)端未啟動(dòng),現(xiàn)在啟動(dòng)wg服務(wù)端"(ls /etc/wireguard/wg0.conf && systemctl restart wg-quick@wg0.service) || (echo "wireguard服務(wù)啟動(dòng)失敗,腳本停止" && exit 1)fi }# 設(shè)置客戶端dns function set_client_dns() {local resultresult=$(systemctl is-active dnsmasq.service)if [[ $result != "active" ]]; thenecho "dnsmasq.service服務(wù)端未啟動(dòng)"client_dns="8.8.8.8"elseclient_dns=$(hostname -i)fi }# 生成客戶端密鑰文件 function gen_client_key() {# 判斷同名密鑰文件是否存在,,如存在停止腳本(ls /etc/wireguard/user_conf/"$client_name".privatekey &>/dev/null && ls /etc/wireguard/user_conf/"$client_name".publickey &>/dev/null) && echo "同名密鑰文件已存在,腳本停止" && exit 1# 生成客戶端密鑰對(duì)文件umask 077 | wg genkey | tee /etc/wireguard/user_conf/"$client_name".privatekey | wg pubkey >/etc/wireguard/user_conf/"$client_name".publickey# 檢查預(yù)共享密鑰是否存在,如存在停止腳本ls /etc/wireguard/user_conf/"$client_name".PresharedKey &>/dev/null && echo "同名密鑰文件已存在,腳本停止" && exit 1# 生成預(yù)共享密鑰umask 077 | wg genpsk | tee /etc/wireguard/user_conf/"$client_name".PresharedKey }# 為用戶分配IP地址 function gen_client_ip() {## 統(tǒng)計(jì)目錄下的配置名數(shù)量,+2就是已創(chuàng)建的ip數(shù)量ip_sum=$(ls /etc/wireguard/user_conf/ | wc -l)# 新增的ip地址=已創(chuàng)建的ip數(shù)量+2ip_add_host=$((ip_sum + 2))# shell腳本的變量默認(rèn)是全局變量ip_add="10.89.64.$ip_add_host" }# 添加新客戶端配置到wg服務(wù)端wg0.conf文件中 function add_client_to_server() {# 讀取公鑰字符串client_public=$(cat /etc/wireguard/user_conf/"$client_name".publickey)# 增加客戶端的公鑰到服務(wù)端(加載到內(nèi)存隊(duì)列中)## set <interface>## peer <base64 public key>## preshared-key 用戶的預(yù)共享密鑰,這里必須傳文件wg set wg0 peer "$client_public" preshared-key /etc/wireguard/user_conf/"$client_name".PresharedKey allowed-ips "$ip_add"# 重啟wg服務(wù)端,使新的客戶端生效## 一定要重啟wg服務(wù)端,新的客戶端配置才會(huì)被加載,加載完成后新客戶端就可以接入到服務(wù)器了。systemctl restart wg-quick@wg0# 在不中斷活動(dòng)會(huì)話的情況下重新加載配置文件(比重啟服務(wù)優(yōu)雅)# wg syncconf wg0 <(wg-quick strip wg0)# wg syncconf wg0 <(wg-quick strip /etc/wireguard/user_conf/u1/u1.conf) }# 生成客戶端的配置文件 function gen_new_user_profile() {cat <<EOF >/etc/wireguard/user_conf/"$client_name".conf [Interface] # name=$1 # 客戶端的私匙 PrivateKey = $(cat /etc/wireguard/user_conf/"$client_name".privatekey) # 客戶端的內(nèi)網(wǎng)IP地址 Address = $ip_add/24# 客戶端MTU配置,不設(shè)置,則為auto# 解析域名用的DNS DNS = $client_dns[Peer] # 服務(wù)器的公匙 PublicKey = $(cat /etc/wireguard/server.publickey)# 預(yù)共享密鑰 PresharedKey = $(cat /etc/wireguard/user_conf/"$client_name".PresharedKey)# 服務(wù)器地址和端口 Endpoint = $server_public_ip:51820# 因?yàn)槭强蛻舳?#xff0c;所以這個(gè)設(shè)置為全部IP段即可 AllowedIPs = 0.0.0.0/0# 連接保活間隔 ## 服務(wù)端和客戶端一方?jīng)]有公網(wǎng)IP,都是NAT,那么就需要添加這個(gè)參數(shù)定時(shí)鏈接服務(wù)端(單位:秒) ## 客戶端和服務(wù)端都是公網(wǎng),不建議使用該參數(shù)(設(shè)置為0,或客戶端配置文件中刪除這行) PersistentKeepalive = 0 EOF }# 刪除客戶端的密鑰文件 function clear_user_key_file() {# 刪除公鑰文件rm -rf /etc/wireguard/user_conf/"$client_name".publickey &>/dev/null# 刪除私鑰文件rm -rf /etc/wireguard/user_conf/"$client_name".privatekey &>/dev/null# 刪除共享密鑰文件rm -rf /etc/wireguard/user_conf/"$client_name".PresharedKey &>/dev/null }# 在屏幕生成二維碼 function gen_qrencode() {# 將這個(gè)客戶端配置文件生成二維碼,展示在終端中qrencode -t ansiutf8 </etc/wireguard/user_conf/"$client_name".conf }#開始菜單 function main() {# 環(huán)境檢查check_env# 生成客戶端密鑰文件gen_client_key# 為用戶分配IP地址gen_client_ip# 配置客戶端的DNSset_client_dns# 添加新客戶端配置到wg服務(wù)端wg0.conf文件中add_client_to_server# 生成客戶端的配置文件gen_new_user_profile "$@"# 刪除客戶端的密鑰文件clear_user_key_file "$@"# 在屏幕生成二維碼gen_qrencode }# main方法,顯示菜單 main "$@"

總結(jié)

以上是生活随笔為你收集整理的Centos7配置Wireguard的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。