centos7_wireguard_install.sh 4.0 KB

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