centos7_wireguard_install.sh 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. #!/bin/bash
  2. https://github.com/atrandys/wireguard/edit/master/wireguard_install.sh
  3. #判断系统
  4. if [ ! -e '/etc/redhat-release' ]; then
  5. echo "仅支持centos7"
  6. exit
  7. fi
  8. if [ -n "$(grep ' 6\.' /etc/redhat-release)" ] ;then
  9. echo "仅支持centos7"
  10. exit
  11. fi
  12. #更新内核
  13. update_kernel(){
  14. yum -y install epel-release
  15. sed -i "0,/enabled=0/s//enabled=1/" /etc/yum.repos.d/epel.repo
  16. yum remove -y kernel-devel
  17. rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
  18. rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
  19. yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
  20. yum -y --enablerepo=elrepo-kernel install kernel-ml
  21. sed -i "s/GRUB_DEFAULT=saved/GRUB_DEFAULT=0/" /etc/default/grub
  22. grub2-mkconfig -o /boot/grub2/grub.cfg
  23. wget https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-ml-devel-4.19.1-1.el7.elrepo.x86_64.rpm
  24. rpm -ivh kernel-ml-devel-4.19.1-1.el7.elrepo.x86_64.rpm
  25. yum -y --enablerepo=elrepo-kernel install kernel-ml-devel
  26. read -p "需要重启VPS,再次执行脚本选择安装wireguard,是否现在重启 ? [Y/n] :" yn
  27. [ -z "${yn}" ] && yn="y"
  28. if [[ $yn == [Yy] ]]; then
  29. echo -e "${Info} VPS 重启中..."
  30. reboot
  31. fi
  32. }
  33. #生成随机端口
  34. rand(){
  35. min=$1
  36. max=$(($2-$min+1))
  37. num=$(cat /dev/urandom | head -n 10 | cksum | awk -F ' ' '{print $1}')
  38. echo $(($num%$max+$min))
  39. }
  40. wireguard_update(){
  41. yum update -y wireguard-dkms wireguard-tools
  42. echo "更新完成"
  43. }
  44. wireguard_remove(){
  45. yum remove -y wireguard-dkms wireguard-tools
  46. rm -rf /etc/wireguard/
  47. echo "卸载完成"
  48. }
  49. config_client(){
  50. cat > /etc/wireguard/client.conf <<-EOF
  51. [Interface]
  52. PrivateKey = $c1
  53. Address = 10.0.0.2/24
  54. DNS = 8.8.8.8
  55. MTU = 1420
  56. [Peer]
  57. PublicKey = $s2
  58. Endpoint = $serverip:$port
  59. AllowedIPs = 0.0.0.0/0, ::0/0
  60. PersistentKeepalive = 25
  61. EOF
  62. }
  63. #centos7安装wireguard
  64. wireguard_install(){
  65. curl -Lo /etc/yum.repos.d/wireguard.repo https://copr.fedorainfracloud.org/coprs/jdoss/wireguard/repo/epel-7/jdoss-wireguard-epel-7.repo
  66. yum install -y dkms gcc-c++ gcc-gfortran glibc-headers glibc-devel libquadmath-devel libtool systemtap systemtap-devel
  67. yum -y install wireguard-dkms wireguard-tools
  68. yum -y install qrencode
  69. mkdir /etc/wireguard
  70. cd /etc/wireguard
  71. wg genkey | tee sprivatekey | wg pubkey > spublickey
  72. wg genkey | tee cprivatekey | wg pubkey > cpublickey
  73. s1=$(cat sprivatekey)
  74. s2=$(cat spublickey)
  75. c1=$(cat cprivatekey)
  76. c2=$(cat cpublickey)
  77. serverip=$(curl ipv4.icanhazip.com)
  78. port=$(rand 10000 60000)
  79. chmod 777 -R /etc/wireguard
  80. systemctl stop firewalld
  81. systemctl disable firewalld
  82. yum install -y iptables-services
  83. systemctl enable iptables
  84. systemctl start iptables
  85. iptables -P INPUT ACCEPT
  86. iptables -P OUTPUT ACCEPT
  87. iptables -P FORWARD ACCEPT
  88. iptables -F
  89. service iptables save
  90. service iptables restart
  91. echo 1 > /proc/sys/net/ipv4/ip_forward
  92. echo "net.ipv4.ip_forward = 1" > /etc/sysctl.conf
  93. cat > /etc/wireguard/wg0.conf <<-EOF
  94. [Interface]
  95. PrivateKey = $s1
  96. Address = 10.0.0.1/24
  97. PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  98. PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
  99. ListenPort = $port
  100. DNS = 8.8.8.8
  101. MTU = 1420
  102. [Peer]
  103. PublicKey = $c2
  104. AllowedIPs = 10.0.0.2/32
  105. EOF
  106. config_client
  107. wg-quick up wg0
  108. systemctl enable wg-quick@wg0
  109. content=$(cat /etc/wireguard/client.conf)
  110. echo "电脑端请下载client.conf,手机端可直接使用软件扫码"
  111. echo "${content}" | qrencode -o - -t UTF8
  112. }
  113. #开始菜单
  114. start_menu(){
  115. clear
  116. echo "========================="
  117. echo " 介绍:适用于CentOS7"
  118. echo " 作者:atrandys"
  119. echo " 网站:www.atrandys.com"
  120. echo " Youtube:atrandys"
  121. echo "========================="
  122. echo "1. 升级系统内核"
  123. echo "2. 安装wireguard"
  124. echo "3. 升级wireguard"
  125. echo "4. 卸载wireguard"
  126. echo "0. 退出脚本"
  127. echo
  128. read -p "请输入数字:" num
  129. case "$num" in
  130. 1)
  131. update_kernel
  132. ;;
  133. 2)
  134. wireguard_install
  135. ;;
  136. 3)
  137. wireguard_update
  138. ;;
  139. 4)
  140. wireguard_remove
  141. ;;
  142. 0)
  143. exit 1
  144. ;;
  145. *)
  146. clear
  147. echo "请输入正确数字"
  148. sleep 5s
  149. start_menu
  150. ;;
  151. esac
  152. }
  153. start_menu