1
0

wgmtu.sh 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427
  1. #!/bin/bash
  2. # 定义文字颜色
  3. Green="\033[32m" && Red="\033[31m" && GreenBG="\033[42;37m" && RedBG="\033[41;37m" && Font="\033[0m"
  4. Yellow='\033[0;33m' && SkyBlue='\033[0;36m'
  5. # 修改mtu数值
  6. setmtu(){
  7. echo -e "${GreenBG}WireGuard 修改服务器端MTU值,提高效率;默认值MTU=1420${Font}"
  8. read -p "请输入数字(1200--1500): " num
  9. if [[ ${num} -ge 1200 ]] && [[ ${num} -le 1500 ]]; then
  10. mtu=$num
  11. else
  12. mtu=1420
  13. fi
  14. ip link set mtu $num up dev wg0
  15. wg-quick save wg0
  16. echo -e "${SkyBlue}:: 服务器端MTU值已经修改!${Font}"
  17. }
  18. # 修改端口号
  19. setport(){
  20. echo -e "${GreenBG}修改 WireGuard 服务器端端口号,客户端要自行修改${Font}"
  21. read -p "请输入数字(100--60000): " num
  22. if [[ ${num} -ge 100 ]] && [[ ${num} -le 60000 ]]; then
  23. port=$num
  24. wg set wg0 listen-port $port
  25. wg-quick save wg0
  26. echo -e "${SkyBlue}:: 端口号已经修改, 客户端请手工修改! ${Font}"
  27. else
  28. echo -e "${Red}:: 没有修改端口号!${Font}"
  29. fi
  30. }
  31. # 显示手机客户端二维码
  32. conf_QRcode(){
  33. echo -e "${Yellow}:: 显示手机客户端二维码(默认2号),请输入数字${Font}\c"
  34. read -p "(2-9): " x
  35. if [[ ${x} -ge 2 ]] && [[ ${x} -le 9 ]]; then
  36. i=$x
  37. else
  38. i=2
  39. fi
  40. host=$(hostname -s)
  41. cat /etc/wireguard/wg_${host}_$i.conf | qrencode -o - -t UTF8
  42. echo -e "${Green}:: 配置文件: wg_${host}_$i.conf 生成二维码,请用手机客户端扫描使用${Font}"
  43. echo -e "${SkyBlue}:: SSH工具推荐Git-Bash 2.20; GCP_SSH(浏览器)字体Courier New 二维码正常${Font}"
  44. }
  45. # 重置 WireGuard 客户端配置和数量
  46. wg_clients(){
  47. echo -e "${Red}:: 注意原来的客户端配置都会删除,按 Ctrl+ C 可以紧急撤销 ${Font}"
  48. # 转到wg配置文件目录
  49. cd /etc/wireguard
  50. cp wg0.conf conf.wg0.bak
  51. echo -e "${SkyBlue}:: 输入客户端Peer总数${Font}\c"
  52. read -p "(2--200): " num_x
  53. if [[ ${num_x} -ge 2 ]] && [[ ${num_x} -le 200 ]]; then
  54. wg_num=OK
  55. else
  56. num_x=3
  57. fi
  58. # 服务器 IP 和 端口
  59. port=$(wg show wg0 listen-port) && host=$(hostname -s)
  60. serverip=$(curl -4 ip.sb)
  61. # 删除原配置,让IP和ID号对应; 保留原来服务器的端口等配置
  62. rm /etc/wireguard/wg_${host}_* >/dev/null 2>&1
  63. head -n 13 conf.wg0.bak > wg0.conf
  64. sed -i '13s/.//g' wg0.conf
  65. # 重启wg服务器
  66. wg-quick down wg0 >/dev/null 2>&1
  67. wg-quick up wg0 >/dev/null 2>&1
  68. # 重新生成用户配置数量
  69. for i in `seq 2 200`
  70. do
  71. ip=10.0.0.${i}
  72. wg genkey | tee cprivatekey | wg pubkey > cpublickey
  73. wg set wg0 peer $(cat cpublickey) allowed-ips $ip/32
  74. cat <<EOF >wg_${host}_$i.conf
  75. [Interface]
  76. PrivateKey = $(cat cprivatekey)
  77. Address = $ip/24
  78. DNS = 8.8.8.8
  79. [Peer]
  80. PublicKey = $(wg show wg0 public-key)
  81. Endpoint = $serverip:$port
  82. AllowedIPs = 0.0.0.0/0, ::0/0
  83. PersistentKeepalive = 25
  84. EOF
  85. cat wg_${host}_$i.conf | qrencode -o wg_${host}_$i.png
  86. if [ $i -ge $num_x ]; then break; fi
  87. done
  88. wg-quick save wg0
  89. clear && display_peer
  90. cat /etc/wireguard/wg_${host}_2.conf
  91. echo -e "${SkyBlue}:: 使用${GreenBG} bash wg5 ${SkyBlue}命令,可以临时网页下载配置和二维码${Font}"
  92. }
  93. # 安装Speeder+Udp2Raw服务TCP伪装,加速功能
  94. ss_kcp_udp2raw_wg_speed(){
  95. # 下载/编译 shadowsocks-libev
  96. wget -qO- git.io/fhExJ | bash
  97. wget -O ~/ss_wg_set_raw git.io/fpKnF >/dev/null 2>&1
  98. bash ~/ss_wg_set_raw
  99. rm ~/ss_wg_set_raw
  100. }
  101. # 常用工具和配置
  102. get_tools_conf(){
  103. apt-get update
  104. apt-get install -y htop tmux screen iperf3 >/dev/null 2>&1
  105. yum install -y vim htop tmux screen iperf3 >/dev/null 2>&1
  106. wget -O .vimrc --no-check-certificate https://raw.githubusercontent.com/hongwenjun/srgb/master/vim/_vimrc
  107. wget -O .bashrc --no-check-certificate https://raw.githubusercontent.com/hongwenjun/srgb/master/vim/_bashrc
  108. wget -O .tmux.conf --no-check-certificate https://raw.githubusercontent.com/hongwenjun/tmux_for_windows/master/.tmux.conf
  109. }
  110. # 主菜单输入数字 88 # 隐藏功能:从源VPS克隆服务端配置,获得常用工具和配置
  111. scp_conf(){
  112. echo -e "${RedBG}:: 警告: 警告: 警告: VPS服务器已经被GFW防火墙关照,按 Ctrl+ C 可以紧急逃离! ${Font}"
  113. echo "隐藏功能:从源VPS克隆服务端配置,共用客户端配置"
  114. read -p "请输入源VPS的IP地址(域名):" vps_ip
  115. cmd="scp root@${vps_ip}:/etc/wireguard/* /etc/wireguard/. "
  116. echo -e "${GreenBG}# ${cmd} ${Font} 现在运行scp命令,按提示输入yes,源vps的root密码"
  117. ${cmd}
  118. wg-quick down wg0 >/dev/null 2>&1
  119. wg-quick up wg0 >/dev/null 2>&1
  120. echo -e "${RedBG} 我真不知道WG服务器端是否已经使用源vps的配置启动! ${Font}"
  121. if [ ! -f '~/.tmux.conf' ]; then
  122. get_tools_conf
  123. fi
  124. }
  125. # 隐藏功能开放: 一键脚本全家桶
  126. onekey_plus(){
  127. echo -e "${SkyBlue} 一键安装设置全家桶 by 蘭雅sRGB ${Font}"
  128. cat <<EOF
  129. # 下载 IPTABLES 设置防火墙规则 脚本 By 蘭雅sRGB
  130. wget -qO safe_iptables.sh git.io/fhUSe && bash safe_iptables.sh
  131. # Google Cloud Platform GCP实例开启密码与root用户登陆
  132. wget -qO- git.io/fpQWf | bash
  133. # 一键安装 vnstat 流量检测 by 蘭雅sRGB
  134. wget -qO- git.io/fxxlb | bash
  135. # 一键安装wireguard 脚本 Debian 9 (源:逗比网安装笔记)
  136. wget -qO- git.io/fptwc | bash
  137. # 一键 WireGuard 多用户配置共享脚本 by 蘭雅sRGB
  138. wget -qO- https://git.io/fpnQt | bash
  139. # 一键安装 SS+Kcp+Udp2Raw 脚本 快速安装 for Debian 9
  140. wget -qO- git.io/fpZIW | bash
  141. # 一键安装 SS+Kcp+Udp2Raw 脚本 for Debian 9 Ubuntu (编译安装)
  142. wget -qO- git.io/fx6UQ | bash
  143. # Telegram 代理 MTProxy Go版 一键脚本(源:逗比网)
  144. wget -qO mtproxy_go.sh git.io/fpWo4 && bash mtproxy_go.sh
  145. # linux下golang环境搭建自动脚本 by 蘭雅sRGB
  146. wget -qO- https://git.io/fp4jf | bash
  147. # SuperBench.sh 一键测试服务器的基本参数
  148. wget -qO- git.io/superbench.sh | bash
  149. # 使用BestTrace查看VPS的去程和回程
  150. wget -qO- git.io/fp5lf | bash
  151. # qrencode 生成二维码 -o- 参数显示在屏幕 -t utf8 文本格式
  152. cat wg_vultr_5.conf | qrencode -o- -t utf8
  153. EOF
  154. echo -e "${SkyBlue} 开源项目:https://github.com/hongwenjun/vps_setup ${Font}"
  155. }
  156. safe_iptables(){
  157. # IPTABLES 设置防火墙规则 脚本 By 蘭雅sRGB 特别感谢 TaterLi 指导
  158. wget -qO safe_iptables.sh git.io/fhUSe && bash safe_iptables.sh
  159. }
  160. # 更新wgmtu脚本
  161. update_self(){
  162. # 安装 bash wgmtu 脚本用来设置服务器
  163. wget -O ~/wgmtu https://raw.githubusercontent.com/hongwenjun/vps_setup/master/Wireguard/wgmtu.sh >/dev/null 2>&1
  164. }
  165. # 更新 WireGuard
  166. wireguard_update(){
  167. yum update -y wireguard-dkms wireguard-tools >/dev/null 2>&1
  168. apt update -y wireguard-dkms wireguard-tools >/dev/null 2>&1
  169. echo -e "${RedBG} 更新完成 ${Font}"
  170. }
  171. # 卸载 WireGuard
  172. wireguard_remove(){
  173. wg-quick down wg0
  174. yum remove -y wireguard-dkms wireguard-tools >/dev/null 2>&1
  175. apt remove -y wireguard-dkms wireguard-tools >/dev/null 2>&1
  176. rm -rf /etc/wireguard/
  177. echo -e "${RedBG} 卸载完成 ${Font}"
  178. }
  179. rc-local_remove(){
  180. echo -e "${RedBG}推荐: 卸载Udp2Raw服务使用 vim /etc/rc.local 手工编辑修改 ${Font}"
  181. echo -e "${GreenBG} 按 Ctrl + C 可以取消 卸载操作 ${Font}"
  182. read -p "请任意键确认:" yes
  183. systemctl stop rc-local
  184. mv /etc/rc.local ~/rc.local
  185. echo -e "${RedBG} 卸载完成,rc.local 备份在 /root 目录 ${Font}"
  186. }
  187. update_remove_menu(){
  188. echo -e "${RedBG} 更新/卸载 WireGuard服务端和Udp2Raw ${Font}"
  189. echo -e "${Green}> 1. 更新 WireGuard 服务端"
  190. echo -e "> 2. 卸载 WireGuard 服务端"
  191. echo -e "> 3. 卸载 Udp2Raw 服务"
  192. echo -e "> 4. 退出${Font}"
  193. echo
  194. read -p "请输入数字(1-4):" num_x
  195. case "$num_x" in
  196. 1)
  197. wireguard_update
  198. ;;
  199. 2)
  200. wireguard_remove
  201. ;;
  202. 3)
  203. rc-local_remove
  204. ;;
  205. 4)
  206. exit 1
  207. ;;
  208. *)
  209. ;;
  210. esac
  211. }
  212. # 删除末尾的Peer
  213. del_last_peer(){
  214. peer_key=$(wg show wg0 allowed-ips | tail -1 | awk '{print $1}')
  215. wg set wg0 peer $peer_key remove
  216. wg-quick save wg0
  217. echo -e "${SkyBlue}:: 删除客户端 peer: ${Yellow} ${peer_key} ${SkyBlue} 完成.${Font}"
  218. }
  219. # 显示激活Peer表
  220. display_peer(){
  221. # peer和ip表写临时文件
  222. wg show wg0 allowed-ips > /tmp/peer_list
  223. # 显示 peer和ip表
  224. echo -e "${RedBG} ID ${GreenBG} Peer: <base64 public key> ${SkyBlue} IP_Addr: ${Font}"
  225. i=1
  226. while read -r line || [[ -n $line ]]; do
  227. peer=$(echo $line | awk '{print $1}')
  228. ip=$(echo $line | awk '{print $2}')
  229. line="> ${Red}${i} ${Yellow}${peer}${Font} ${ip}"
  230. echo -e $line && let i++
  231. done < /tmp/peer_list
  232. }
  233. # 选择删除Peer客户端
  234. del_peer(){
  235. display_peer
  236. echo
  237. echo -e "${RedBG}请选择 IP_Addr 对应 ID 号码,指定客户端配置将删除! ${Font}"
  238. read -p "请输入ID号数字(1-X):" x
  239. peer_cnt=$(cat /tmp/peer_list | wc -l)
  240. if [[ ${x} -ge 1 ]] && [[ ${x} -le ${peer_cnt} ]]; then
  241. i=$x
  242. peer_key=$(cat /tmp/peer_list | head -n $i | tail -1 | awk '{print $1}')
  243. wg set wg0 peer $peer_key remove
  244. wg-quick save wg0
  245. echo -e "${SkyBlue}:: 删除客户端 peer: ${Yellow} ${peer_key} ${SkyBlue} 完成.${Font}"
  246. else
  247. echo -e "${SkyBlue}:: 命令使用: ${GreenBG} wg set wg0 peer <base64 public key> remove ${Font}"
  248. fi
  249. rm /tmp/peer_list
  250. }
  251. # 添加新的客户端peer
  252. add_peer(){
  253. # 服务器 IP 端口 ,新客户端 序号和IP
  254. port=$(wg show wg0 listen-port)
  255. serverip=$(curl -4 ip.sb) && host=$(hostname -s) && cd /etc/wireguard
  256. wg genkey | tee cprivatekey | wg pubkey > cpublickey
  257. ipnum=$(wg show wg0 allowed-ips | tail -1 | awk '{print $2}' | awk -F '[./]' '{print $4}')
  258. i=$((10#${ipnum}+1)) && ip=10.0.0.${i}
  259. # 生成客户端配置文件
  260. cat <<EOF >wg_${host}_$i.conf
  261. [Interface]
  262. PrivateKey = $(cat cprivatekey)
  263. Address = $ip/24
  264. DNS = 8.8.8.8
  265. [Peer]
  266. PublicKey = $(wg show wg0 public-key)
  267. Endpoint = $serverip:$port
  268. AllowedIPs = 0.0.0.0/0, ::0/0
  269. PersistentKeepalive = 25
  270. EOF
  271. # 在wg服务器中生效客户端peer
  272. wg set wg0 peer $(cat cpublickey) allowed-ips $ip/32
  273. wg-quick save wg0
  274. # 显示客户端
  275. cat /etc/wireguard/wg_${host}_$i.conf | qrencode -o wg_${host}_$i.png
  276. cat /etc/wireguard/wg_${host}_$i.conf | qrencode -o - -t UTF8
  277. echo -e "${SkyBlue}:: 新客户端peer添加完成; 文件:${Yellow} /etc/wireguard/wg_${host}_$i.conf ${Font}"
  278. cat /etc/wireguard/wg_${host}_$i.conf
  279. }
  280. wg_clients_menu(){
  281. echo -e "${RedBG} 添加/删除 WireGuard Peer 客户端管理 ${Font}"
  282. echo -e "${Green}> 1. 添加一个 WireGuard Peer 客户端配置"
  283. echo -e "> 2. 删除末尾 WireGuard Peer 客户端配置"
  284. echo -e "> 3. 指定删除 WireGuard Peer 客户端配置"
  285. echo "------------------------------------------------------"
  286. echo -e "${SkyBlue}> 4. 退出"
  287. echo -e "> 5.${RedBG} 重置 WireGuard 客户端 Peer 数量 ${Font}"
  288. echo
  289. read -p "请输入数字(1-5):" num_x
  290. case "$num_x" in
  291. 1)
  292. add_peer
  293. ;;
  294. 2)
  295. del_last_peer
  296. ;;
  297. 3)
  298. del_peer
  299. ;;
  300. 4)
  301. display_peer
  302. exit 1
  303. ;;
  304. 5)
  305. wg_clients
  306. ;;
  307. *)
  308. ;;
  309. esac
  310. }
  311. # 设置菜单
  312. start_menu(){
  313. clear
  314. echo -e "${RedBG} 一键安装 WireGuard 脚本 For Debian_9 Ubuntu Centos_7 ${Font}"
  315. echo -e "${GreenBG} 开源项目:https://github.com/hongwenjun/vps_setup ${Font}"
  316. echo -e "${Green}> 1. 显示手机客户端二维码"
  317. echo -e "> 2. 修改 WireGuard 服务器端 MTU 值"
  318. echo -e "> 3. 修改 WireGuard 端口号"
  319. echo -e "> 4. 安装 WireGuard+Speeder+Udp2Raw 和 SS+Kcp+Udp2RAW 一键脚本"
  320. echo "----------------------------------------------------------"
  321. echo -e "${SkyBlue}> 5. 添加/删除 WireGuard Peer 客户端管理"
  322. echo -e "> 6. 更新/卸载 WireGuard服务端和Udp2Raw"
  323. echo -e "> 7. vps_setup 一键脚本全家桶大礼包"
  324. echo -e "> 8. ${RedBG} 小白一键设置防火墙 ${Font}"
  325. echo
  326. read -p "请输入数字(1-8):" num
  327. case "$num" in
  328. 1)
  329. conf_QRcode
  330. ;;
  331. 2)
  332. setmtu
  333. ;;
  334. 3)
  335. setport
  336. ;;
  337. 4)
  338. ss_kcp_udp2raw_wg_speed
  339. ;;
  340. 5)
  341. wg_clients_menu
  342. ;;
  343. 6)
  344. update_remove_menu
  345. update_self
  346. exit 1
  347. ;;
  348. 7)
  349. onekey_plus
  350. ;;
  351. 8)
  352. safe_iptables
  353. ;;
  354. 88)
  355. scp_conf
  356. ;;
  357. *)
  358. display_peer
  359. ;;
  360. esac
  361. }
  362. start_menu