CentOS 6、7下IPSEC/L2TP VPN一键安装脚本(openswan+xl2tpd)

  • A+
所属分类:Shell

概念性的东西这里不再赘述,网上有太多,一键安装脚本也有很多,但是很多不能用,能用的也仅仅只是在CentOS6下使用,CentOS7基本没看到这些安装脚本。于是花了一些时间来折腾测试,写这个脚本方便以后VPN的一键安装搭建。其中用的开源软件包是openswan和xl2tpd,,中间碰到过很多很多问题,如openswan和xl2tpd之间的兼容性问题。

请容许我这样做,脚本依赖《OneinStack》或《lnmp一键安装包》,可以在安装完lnmp后,执行这个脚本(vpn_centos.sh)来一键搭建你的个人vpn

CentOS 6、7下IPSEC/L2TP VPN一键安装脚本,如下:

  1. #!/bin/bash
  2. # Author:  yeho <lj2007331 AT gmail.com>
  3. # Blog:  //blog.linuxeye.com
  4. #
  5. # This script's project home is:
  6. #       //blog.linuxeye.com/31.html
  7. #       https://github.com/lj2007331/lnmp
  8. # Check if user is root
  9. [ $(id -u) != "0" ] && echo "Error: You must be root to run this script" && exit 1
  10. export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
  11. clear
  12. printf "
  13. #######################################################################
  14. #    LNMP/LAMP/LANMP for CentOS/RadHat 5+ Debian 6+ and Ubuntu 12+    #
  15. # For more information please visit //blog.linuxeye.com/31.html  #
  16. #######################################################################
  17. "
  18. [ ! -e "src" ] && mkdir src
  19. cd src
  20. . ../include/download.sh
  21. while :
  22. do
  23.         echo
  24.         read -p "Please input private IP-Range(Default Range: 10.0.2): " iprange
  25.         [ -z "$iprange" ] && iprange="10.0.2"
  26.         if [ -z "`echo $iprange | grep -E "^10\.|^192\.168\.|^172\." | grep -o '^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$'`" ];then
  27.                 echo -e "\033[31minput error! Input format: xxx.xxx.xxx\033[0m"
  28.         else
  29.                 break
  30.         fi
  31. done
  32. echo
  33. read -p "Please input PSK(Default PSK: psk): " MYPSK
  34. [ -z "$MYPSK" ] && MYPSK="psk"
  35. while :
  36. do
  37.         echo
  38.         read -p "Please input username: " Username
  39.         [ -n "$Username" ] && break
  40. done
  41. while :
  42. do
  43.         echo
  44.         read -p "Please input password: " Password
  45.         [ -n "$Password" ] && break
  46. done
  47. clear
  48. public_IP=`../functions/get_public_ip.py`
  49. get_char()
  50. {
  51. SAVEDSTTY=`stty -g`
  52. stty -echo
  53. stty cbreak
  54. dd if=/dev/tty bs=1 count=1 2> /dev/null
  55. stty -raw
  56. stty echo
  57. stty $SAVEDSTTY
  58. }
  59. echo ""
  60. echo "ServerIP:$public_IP"
  61. echo ""
  62. echo "Server Local IP:$iprange.1"
  63. echo ""
  64. echo "Client Remote IP Range:$iprange.2-$iprange.254"
  65. echo ""
  66. echo "PSK:$MYPSK"
  67. echo ""
  68. echo "Press any key to start..."
  69. char=`get_char`
  70. clear
  71. if [ -n "`grep 'CentOS Linux release 7' /etc/redhat-release`" ];then
  72.         CentOS_REL=7
  73.         for Package in wget ppp iptables iptables-services make gcc gmp-devel xmlto bison flex xmlto libpcap-devel lsof vim-enhanced
  74.         do
  75.                 yum -y install $Package
  76.         done
  77.         echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
  78. elif [ -n "`grep 'CentOS release 6' /etc/redhat-release`" ];then
  79.         CentOS_REL=6
  80.         for Package in wget ppp iptables make gcc gmp-devel xmlto bison flex xmlto libpcap-devel lsof vim-enhanced
  81.         do
  82.                 yum -y install $Package
  83.         done
  84.         sed -i 's@net.ipv4.ip_forward.*@net.ipv4.ip_forward = 1@g' /etc/sysctl.conf
  85. else
  86.         echo -e "\033[31mDoes not support this OS, Please contact the author! \033[0m"
  87.         exit 1
  88. fi
  89. sysctl -p
  90. mknod /dev/random c 1 9
  91. src_url=https://download.openswan.org/openswan/old/openswan-2.6/openswan-2.6.38.tar.gz && Download_src
  92. tar xzf openswan-2.6.38.tar.gz
  93. cd openswan-2.6.38
  94. make programs install
  95. cd ..
  96. cat >/etc/ipsec.conf<<EOF
  97. config setup
  98.     nat_traversal=yes
  99.     virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
  100.     oe=off
  101.     protostack=netkey
  102.     plutostderrlog=/var/log/ipsec.log
  103. conn L2TP-PSK-NAT
  104.     rightsubnet=vhost:%priv
  105.     also=L2TP-PSK-noNAT
  106. conn L2TP-PSK-noNAT
  107.     authby=secret
  108.     type=tunnel
  109.     pfs=no
  110.     auto=add
  111.     keyingtries=3
  112.     rekey=no
  113.     ikelifetime=8h
  114.     keylife=1h
  115.     left=$public_IP
  116.     leftprotoport=17/1701
  117.     right=%any
  118.     rightprotoport=17/%any
  119.     rightsubnetwithin=0.0.0.0/0
  120.     dpddelay=30
  121.     dpdtimeout=120
  122.     dpdaction=clear
  123. EOF
  124. cat >/etc/ipsec.secrets<<EOF
  125. $public_IP %any: PSK "$MYPSK"
  126. EOF
  127. cat > /usr/bin/zl2tpset << EOF
  128. #!/bin/bash
  129. for each in /proc/sys/net/ipv4/conf/*
  130. do
  131.         echo 0 > \$each/accept_redirects
  132.         echo 0 > \$each/send_redirects
  133. done
  134. EOF
  135. chmod +x /usr/bin/zl2tpset
  136. /usr/bin/zl2tpset
  137. [ -z "`grep zl2tpset /etc/rc.local`" ] &&  echo '/usr/bin/zl2tpset' >> /etc/rc.local
  138. service ipsec restart
  139. src_url=http://pkgs.fedoraproject.org/repo/pkgs/xl2tpd/xl2tpd-1.3.6.tar.gz/2f526cc0c36cf6d8a74f1fb2e08c18ec/xl2tpd-1.3.6.tar.gz && Download_src
  140. tar xzf xl2tpd-1.3.6.tar.gz
  141. cd xl2tpd-1.3.6
  142. make install
  143. [ ! -e "/var/run/xl2tpd" ] && mkdir /var/run/xl2tpd
  144. [ ! -e "/etc/xl2tpd" ] && mkdir /etc/xl2tpd
  145. cd ..
  146. cat >/etc/xl2tpd/xl2tpd.conf<<EOF
  147. [global]
  148. listen-addr = $public_IP
  149. ipsec saref = yes
  150. [lns default]
  151. ip range = $iprange.2-$iprange.254
  152. local ip = $iprange.1
  153. refuse chap = yes
  154. refuse pap = yes
  155. require authentication = yes
  156. ppp debug = yes
  157. pppoptfile = /etc/ppp/options.xl2tpd
  158. length bit = yes
  159. EOF
  160. cat >/etc/ppp/options.xl2tpd<<EOF
  161. require-mschap-v2
  162. ms-dns 8.8.8.8
  163. ms-dns 8.8.4.4
  164. noccp
  165. asyncmap 0
  166. auth
  167. crtscts
  168. lock
  169. hide-password
  170. modem
  171. debug
  172. name l2tpd
  173. proxyarp
  174. lcp-echo-interval 30
  175. lcp-echo-failure 4
  176. idle 1800
  177. mtu 1410
  178. mru 1410
  179. nodefaultroute
  180. connect-delay 5000
  181. logfd 2
  182. logfile /var/log/l2tpd.log
  183. EOF
  184. cat >>/etc/ppp/chap-secrets<<EOF
  185. $Username l2tpd $Password *
  186. EOF
  187. NETWORK_INT=`route | grep default | awk '{print $NF}'`
  188. iptables -t nat -A POSTROUTING -s ${iprange}.0/24 -o $NETWORK_INT -j MASQUERADE
  189. iptables -I FORWARD -s ${iprange}.0/24 -j ACCEPT
  190. iptables -I FORWARD -d ${iprange}.0/24 -j ACCEPT
  191. iptables -I INPUT -p udp --dport 1701 -j ACCEPT
  192. iptables -I INPUT -p udp --dport 500 -j ACCEPT
  193. iptables -I INPUT -p udp --dport 4500 -j ACCEPT
  194. service iptables save
  195. service ipsec restart
  196. xl2tpd
  197. chkconfig ipsec on
  198. clear
  199. ipsec verify
  200. printf "
  201. Serverip:$public_IP
  202. PSK:$MYPSK
  203. username:$Username
  204. password:$Password
  205. "
Wed Nov 17 16:23:59 CST 2014
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:9   其中:访客  6   博主  3

    • avatar Leey 0

      centos7安装成功(有一些改动)
      脚本是直接复制博主上面贴出来的,执行脚本后有些文件未找到( /functions/download.sh和./functions/get_public_ip.py),这俩文件在oneinstack/include下,简单的修改了下脚本,执行成功。很顺利

      • avatar 小强 1

        如何重启服务。。。。我是小白。

        • avatar 百易吧 0

          请问这个怎么添加账号呢? 只能一个账号吗?

          • avatar wd1900 1

            您好,我应用这个脚本后,输出
            SAref kernel support [N/A]
            请问该如何解决

            • avatar google 0

              您好,这个ipsic脚本下载下来,之后是pptp的,直接复制您写的脚本,没有下载脚本,请您更新下。
              我没有这个文件 /functions/download.sh

                • avatar yeho Admin

                  @google 已更新,这个脚本以后不会维护