118 lines
2.4 KiB
Bash
118 lines
2.4 KiB
Bash
#!/bin/bash
|
||
|
||
# 颜色代码
|
||
GREEN='\033[0;32m'
|
||
RED='\033[0;31m'
|
||
NC='\033[0m'
|
||
|
||
# 检查Root权限
|
||
if [[ $EUID -ne 0 ]]; then
|
||
echo -e "${RED}必须以root权限运行此脚本${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
# 生成随机字符串
|
||
generate_random_string() {
|
||
tr -dc 'A-Za-z0-9' < /dev/urandom | head -c "$1"
|
||
}
|
||
|
||
# 主安装函数
|
||
install_l2tp_vpn() {
|
||
# 配置参数
|
||
VPN_SERVER_IP=$(curl -s http://ipinfo.io/ip)
|
||
VPN_PSK=$(generate_random_string 16)
|
||
VPN_USERNAME=$(generate_random_string 8)
|
||
VPN_PASSWORD=$(generate_random_string 12)
|
||
|
||
# 更新和安装依赖
|
||
apt-get update
|
||
apt-get install -y strongswan xl2tpd ppp
|
||
|
||
# IPsec配置
|
||
cat > /etc/ipsec.conf << EOF
|
||
config setup
|
||
charondebug="all"
|
||
uniqueids=never
|
||
|
||
conn l2tp-psk
|
||
authby=secret
|
||
left=%defaultroute
|
||
leftid=$VPN_SERVER_IP
|
||
leftauth=psk
|
||
leftprotoport=17/1701
|
||
leftsendcert=never
|
||
right=%any
|
||
rightauth=psk
|
||
rightprotoport=17/1701
|
||
rightsourceip=10.0.0.0/24
|
||
auto=add
|
||
EOF
|
||
|
||
cat > /etc/ipsec.secrets << EOF
|
||
: PSK "$VPN_PSK"
|
||
EOF
|
||
|
||
# xl2tpd配置
|
||
cat > /etc/xl2tpd/xl2tpd.conf << EOF
|
||
[global]
|
||
port = 1701
|
||
|
||
[lns default]
|
||
ip range = 10.0.0.2-10.0.0.254
|
||
local ip = 10.0.0.1
|
||
require chap = yes
|
||
refuse pap = yes
|
||
require authentication = yes
|
||
name = L2TPServer
|
||
ppp debug = yes
|
||
pppoptfile = /etc/ppp/options.xl2tpd
|
||
length bit = yes
|
||
EOF
|
||
|
||
cat > /etc/ppp/options.xl2tpd << EOF
|
||
ipcp-accept-local
|
||
ipcp-accept-remote
|
||
require-mschap-v2
|
||
ms-dns 8.8.8.8
|
||
ms-dns 1.1.1.1
|
||
noccp
|
||
auth
|
||
hide-password
|
||
nodefaultroute
|
||
usepeerdns
|
||
name l2tpd
|
||
plugin /usr/lib/pppd/*/libplugin.so
|
||
EOF
|
||
|
||
cat > /etc/ppp/chap-secrets << EOF
|
||
$VPN_USERNAME * $VPN_PASSWORD *
|
||
EOF
|
||
|
||
# 设置权限
|
||
chmod 600 /etc/ipsec.secrets /etc/ppp/chap-secrets
|
||
|
||
# 重启服务(使用完整路径)
|
||
/usr/sbin/service strongswan-starter restart
|
||
/usr/sbin/service xl2tpd restart
|
||
|
||
# 输出配置信息
|
||
echo -e "${GREEN}================================================================"
|
||
echo -e "L2TP/IPsec VPN连接详情:"
|
||
echo -e "服务器IP: $VPN_SERVER_IP"
|
||
echo -e "用户名: $VPN_USERNAME"
|
||
echo -e "密码: $VPN_PASSWORD"
|
||
echo -e "预共享密钥: $VPN_PSK"
|
||
echo -e "================================================================${NC}"
|
||
|
||
# 保存连接信息到文件
|
||
cat > /root/vpn_credentials.txt << EOF
|
||
服务器IP: $VPN_SERVER_IP
|
||
用户名: $VPN_USERNAME
|
||
密码: $VPN_PASSWORD
|
||
预共享密钥: $VPN_PSK
|
||
EOF
|
||
}
|
||
|
||
# 执行安装
|
||
install_l2tp_vpn
|