Add open_vpn_install_debian
This commit is contained in:
parent
9868e6d722
commit
52dd9cf0e6
283
open_vpn_install_debian
Normal file
283
open_vpn_install_debian
Normal file
@ -0,0 +1,283 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
OPENVPN_DIR="/etc/openvpn/server"
|
||||||
|
EASYRSA_DIR="/etc/openvpn/easy-rsa"
|
||||||
|
CLIENT_DIR="/root/clients"
|
||||||
|
|
||||||
|
function check_root() {
|
||||||
|
if [[ $EUID -ne 0 ]]; then
|
||||||
|
echo "Run as root"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function detect_nic() {
|
||||||
|
NIC=$(ip route get 1 | awk '{print $5;exit}')
|
||||||
|
}
|
||||||
|
|
||||||
|
function detect_ip() {
|
||||||
|
PUBLIC_IP=$(curl -s https://api.ipify.org)
|
||||||
|
}
|
||||||
|
|
||||||
|
function install_packages() {
|
||||||
|
|
||||||
|
apt update
|
||||||
|
|
||||||
|
apt install -y \
|
||||||
|
openvpn \
|
||||||
|
easy-rsa \
|
||||||
|
iptables \
|
||||||
|
curl \
|
||||||
|
ca-certificates \
|
||||||
|
iproute2
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function enable_forwarding() {
|
||||||
|
|
||||||
|
cat <<EOF > /etc/sysctl.d/99-openvpn.conf
|
||||||
|
net.ipv4.ip_forward=1
|
||||||
|
EOF
|
||||||
|
|
||||||
|
sysctl --system
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function setup_easyrsa() {
|
||||||
|
|
||||||
|
rm -rf $EASYRSA_DIR
|
||||||
|
mkdir -p $EASYRSA_DIR
|
||||||
|
|
||||||
|
cp -r /usr/share/easy-rsa/* $EASYRSA_DIR/
|
||||||
|
|
||||||
|
cd $EASYRSA_DIR
|
||||||
|
|
||||||
|
./easyrsa init-pki
|
||||||
|
EASYRSA_BATCH=1 ./easyrsa build-ca nopass
|
||||||
|
EASYRSA_BATCH=1 ./easyrsa build-server-full server nopass
|
||||||
|
./easyrsa gen-crl
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function create_server_config() {
|
||||||
|
|
||||||
|
mkdir -p $OPENVPN_DIR
|
||||||
|
|
||||||
|
cat <<EOF > $OPENVPN_DIR/server.conf
|
||||||
|
port 1194
|
||||||
|
proto udp
|
||||||
|
dev tun
|
||||||
|
|
||||||
|
user nobody
|
||||||
|
group nogroup
|
||||||
|
|
||||||
|
persist-key
|
||||||
|
persist-tun
|
||||||
|
|
||||||
|
topology subnet
|
||||||
|
server 10.8.0.0 255.255.255.0
|
||||||
|
|
||||||
|
push "redirect-gateway def1 bypass-dhcp"
|
||||||
|
push "dhcp-option DNS 1.1.1.1"
|
||||||
|
push "dhcp-option DNS 1.0.0.1"
|
||||||
|
|
||||||
|
keepalive 10 120
|
||||||
|
|
||||||
|
cipher AES-256-GCM
|
||||||
|
auth SHA256
|
||||||
|
|
||||||
|
tls-server
|
||||||
|
tls-version-min 1.2
|
||||||
|
|
||||||
|
ca ca.crt
|
||||||
|
cert server.crt
|
||||||
|
key server.key
|
||||||
|
dh none
|
||||||
|
ecdh-curve prime256v1
|
||||||
|
|
||||||
|
crl-verify crl.pem
|
||||||
|
|
||||||
|
status /var/log/openvpn-status.log
|
||||||
|
verb 3
|
||||||
|
EOF
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function copy_certificates() {
|
||||||
|
|
||||||
|
cp $EASYRSA_DIR/pki/ca.crt $OPENVPN_DIR/
|
||||||
|
cp $EASYRSA_DIR/pki/issued/server.crt $OPENVPN_DIR/
|
||||||
|
cp $EASYRSA_DIR/pki/private/server.key $OPENVPN_DIR/
|
||||||
|
cp $EASYRSA_DIR/pki/crl.pem $OPENVPN_DIR/
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function configure_firewall() {
|
||||||
|
|
||||||
|
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o $NIC -j MASQUERADE
|
||||||
|
iptables -A INPUT -p udp --dport 1194 -j ACCEPT
|
||||||
|
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function start_openvpn() {
|
||||||
|
|
||||||
|
systemctl daemon-reload
|
||||||
|
systemctl enable openvpn-server@server
|
||||||
|
systemctl restart openvpn-server@server
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function generate_client() {
|
||||||
|
|
||||||
|
read -p "Client name: " CLIENT
|
||||||
|
|
||||||
|
cd $EASYRSA_DIR
|
||||||
|
|
||||||
|
EASYRSA_BATCH=1 ./easyrsa build-client-full $CLIENT nopass
|
||||||
|
|
||||||
|
mkdir -p $CLIENT_DIR
|
||||||
|
|
||||||
|
cat <<EOF > $CLIENT_DIR/$CLIENT.ovpn
|
||||||
|
client
|
||||||
|
dev tun
|
||||||
|
proto udp
|
||||||
|
remote $PUBLIC_IP 1194
|
||||||
|
|
||||||
|
resolv-retry infinite
|
||||||
|
nobind
|
||||||
|
persist-key
|
||||||
|
persist-tun
|
||||||
|
|
||||||
|
remote-cert-tls server
|
||||||
|
|
||||||
|
cipher AES-256-GCM
|
||||||
|
auth SHA256
|
||||||
|
|
||||||
|
verb 3
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF >> $CLIENT_DIR/$CLIENT.ovpn
|
||||||
|
<ca>
|
||||||
|
$(cat $EASYRSA_DIR/pki/ca.crt)
|
||||||
|
</ca>
|
||||||
|
|
||||||
|
<cert>
|
||||||
|
$(sed -ne '/BEGIN CERTIFICATE/,$p' $EASYRSA_DIR/pki/issued/$CLIENT.crt)
|
||||||
|
</cert>
|
||||||
|
|
||||||
|
<key>
|
||||||
|
$(cat $EASYRSA_DIR/pki/private/$CLIENT.key)
|
||||||
|
</key>
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Client created:"
|
||||||
|
echo "$CLIENT_DIR/$CLIENT.ovpn"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function revoke_client() {
|
||||||
|
|
||||||
|
cd $EASYRSA_DIR
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Existing clients:"
|
||||||
|
grep "^V" pki/index.txt | cut -d '=' -f2
|
||||||
|
|
||||||
|
read -p "Client to revoke: " CLIENT
|
||||||
|
|
||||||
|
./easyrsa revoke $CLIENT
|
||||||
|
./easyrsa gen-crl
|
||||||
|
|
||||||
|
cp pki/crl.pem $OPENVPN_DIR/crl.pem
|
||||||
|
|
||||||
|
rm -f $CLIENT_DIR/$CLIENT.ovpn
|
||||||
|
|
||||||
|
echo "Client revoked"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function list_clients() {
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Active clients:"
|
||||||
|
grep "^V" $EASYRSA_DIR/pki/index.txt | cut -d '=' -f2
|
||||||
|
echo
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function remove_openvpn() {
|
||||||
|
|
||||||
|
systemctl stop openvpn-server@server
|
||||||
|
systemctl disable openvpn-server@server
|
||||||
|
|
||||||
|
apt remove --purge -y openvpn easy-rsa
|
||||||
|
|
||||||
|
rm -rf /etc/openvpn
|
||||||
|
rm -rf $CLIENT_DIR
|
||||||
|
|
||||||
|
echo "OpenVPN removed"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function install_openvpn() {
|
||||||
|
|
||||||
|
detect_nic
|
||||||
|
detect_ip
|
||||||
|
|
||||||
|
install_packages
|
||||||
|
enable_forwarding
|
||||||
|
setup_easyrsa
|
||||||
|
create_server_config
|
||||||
|
copy_certificates
|
||||||
|
configure_firewall
|
||||||
|
start_openvpn
|
||||||
|
|
||||||
|
mkdir -p $CLIENT_DIR
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "OpenVPN installed successfully"
|
||||||
|
echo
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function menu() {
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "======================"
|
||||||
|
echo " OpenVPN Manager"
|
||||||
|
echo "======================"
|
||||||
|
echo
|
||||||
|
echo "1) Install OpenVPN"
|
||||||
|
echo "2) Add Client"
|
||||||
|
echo "3) Revoke Client"
|
||||||
|
echo "4) List Clients"
|
||||||
|
echo "5) Remove OpenVPN"
|
||||||
|
echo "6) Exit"
|
||||||
|
echo
|
||||||
|
|
||||||
|
read -p "Select option: " OPTION
|
||||||
|
|
||||||
|
case $OPTION in
|
||||||
|
|
||||||
|
1) install_openvpn ;;
|
||||||
|
2) generate_client ;;
|
||||||
|
3) revoke_client ;;
|
||||||
|
4) list_clients ;;
|
||||||
|
5) remove_openvpn ;;
|
||||||
|
6) exit ;;
|
||||||
|
*) echo "Invalid option" ;;
|
||||||
|
|
||||||
|
esac
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
check_root
|
||||||
|
|
||||||
|
while true
|
||||||
|
do
|
||||||
|
menu
|
||||||
|
done
|
||||||
Loading…
x
Reference in New Issue
Block a user