Merge 7905a726ef into 19a2e838a3
This commit is contained in:
commit
196887613a
2 changed files with 68 additions and 47 deletions
13
README.md
13
README.md
|
|
@ -60,8 +60,8 @@ On the client-side, it's less problematic, but if you want to use an OpenVPN ser
|
||||||
| Debian 9 | ✔️ | ✔️ | ✔️ | ✔️ |
|
| Debian 9 | ✔️ | ✔️ | ✔️ | ✔️ |
|
||||||
| Ubuntu 14.04 | ✔️ | ✔️ | ❌ | ❌ |
|
| Ubuntu 14.04 | ✔️ | ✔️ | ❌ | ❌ |
|
||||||
| Ubuntu 16.04 | ✔️ | ✔️ | ❌ | ❌ |
|
| Ubuntu 16.04 | ✔️ | ✔️ | ❌ | ❌ |
|
||||||
| Ubuntu 17.04 | ✔️ | ✔️ | ✔️ | ✔️ |
|
|
||||||
| [Ubuntu 17.10](https://github.com/Angristan/OpenVPN-install/issues/125) | ❌ | ❌ | ❌ | ❌ |
|
| [Ubuntu 17.10](https://github.com/Angristan/OpenVPN-install/issues/125) | ❌ | ❌ | ❌ | ❌ |
|
||||||
|
| Ubuntu 18.04 | ❔ | ✔️️ | ❔ | ❔ |
|
||||||
| CentOS 6 | ✔️ | ✔️ | ❔ | ❔ |
|
| CentOS 6 | ✔️ | ✔️ | ❔ | ❔ |
|
||||||
| CentOS 7 | ✔️ | ✔️ | ✔️ | ❔ |
|
| CentOS 7 | ✔️ | ✔️ | ✔️ | ❔ |
|
||||||
| Fedora 25 | ❔ | ✔️ | ❔ | ❔ |
|
| Fedora 25 | ❔ | ✔️ | ❔ | ❔ |
|
||||||
|
|
@ -103,6 +103,7 @@ The script will ask you which DNS resolvers you want to use when connected to th
|
||||||
Here are the possibilities :
|
Here are the possibilities :
|
||||||
|
|
||||||
- Current system resolvers, those that are in `/etc/resolv.conf`
|
- Current system resolvers, those that are in `/etc/resolv.conf`
|
||||||
|
- [Cloudflare](https://1.1.1.1/), recommended, fastest resolvers available (Anycast servers)
|
||||||
- [Quad9](https://www.quad9.net), recommended, security and privacy oriented, fast worldwide (Anycast servers)
|
- [Quad9](https://www.quad9.net), recommended, security and privacy oriented, fast worldwide (Anycast servers)
|
||||||
- [FDN's DNS Servers](http://www.fdn.fr/actions/dns/), recommended if you're in western europe (France)
|
- [FDN's DNS Servers](http://www.fdn.fr/actions/dns/), recommended if you're in western europe (France)
|
||||||
- [DNS.WATCH DNS Servers](https://dns.watch/index), recommended if you're in western europe (Germany)
|
- [DNS.WATCH DNS Servers](https://dns.watch/index), recommended if you're in western europe (Germany)
|
||||||
|
|
@ -154,7 +155,7 @@ It also supports SHA1 and MD5, which are unsafe, and all the SHA2 family. I didn
|
||||||
|
|
||||||
### Data channel's cipher
|
### Data channel's cipher
|
||||||
|
|
||||||
By default, OpenVPN uses `BF-CBC` as the data channel cipher. Blowfish is an old (1993) an weak alogorithm. What's *funny* is that even the official OpenVPN documentation admits it.
|
By default, OpenVPN uses `BF-CBC` as the data channel cipher. Blowfish is an old (1993) and weak alogorithm. What's *funny* is that even the official OpenVPN documentation admits it.
|
||||||
|
|
||||||
>The default is BF-CBC, an abbreviation for Blowfish in Cipher Block Chaining mode.
|
>The default is BF-CBC, an abbreviation for Blowfish in Cipher Block Chaining mode.
|
||||||
Using BF-CBC is no longer recommended, because of its 64-bit block size. This small block size allows attacks based on collisions, as demonstrated by SWEET32. See https://community.openvpn.net/openvpn/wiki/SWEET32 for details.
|
Using BF-CBC is no longer recommended, because of its 64-bit block size. This small block size allows attacks based on collisions, as demonstrated by SWEET32. See https://community.openvpn.net/openvpn/wiki/SWEET32 for details.
|
||||||
|
|
@ -260,6 +261,14 @@ SHA-1 is not safe anymore, so I use SHA-256 which is safe and widely used.
|
||||||
|
|
||||||
TLS-Auth is not enabled by default by OpenVPN, but it is in this script.
|
TLS-Auth is not enabled by default by OpenVPN, but it is in this script.
|
||||||
|
|
||||||
|
## Check for DNS leaks
|
||||||
|
|
||||||
|
Go to [dnsleaktest.com](https://dnsleaktest.com/) or [ipleak.net](https://ipleak.net/) with your browser. Only your server's IP should show up.
|
||||||
|
|
||||||
|
## Say thanks
|
||||||
|
|
||||||
|
You can [say thanks](https://saythanks.io/to/Angristan) if you want!
|
||||||
|
|
||||||
## Credits & Licence
|
## Credits & Licence
|
||||||
|
|
||||||
Thanks to the [contributors](https://github.com/Angristan/OpenVPN-install/graphs/contributors) and of course Nyr's orginal work.
|
Thanks to the [contributors](https://github.com/Angristan/OpenVPN-install/graphs/contributors) and of course Nyr's orginal work.
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ if [[ -e /etc/debian_version ]]; then
|
||||||
VERSION_ID=$(grep "VERSION_ID" /etc/os-release)
|
VERSION_ID=$(grep "VERSION_ID" /etc/os-release)
|
||||||
IPTABLES='/etc/iptables/iptables.rules'
|
IPTABLES='/etc/iptables/iptables.rules'
|
||||||
SYSCTL='/etc/sysctl.conf'
|
SYSCTL='/etc/sysctl.conf'
|
||||||
if [[ "$VERSION_ID" != 'VERSION_ID="8"' ]] && [[ "$VERSION_ID" != 'VERSION_ID="9"' ]] && [[ "$VERSION_ID" != 'VERSION_ID="14.04"' ]] && [[ "$VERSION_ID" != 'VERSION_ID="16.04"' ]] && [[ "$VERSION_ID" != 'VERSION_ID="17.10"' ]]; then
|
if [[ "$VERSION_ID" != 'VERSION_ID="8"' ]] && [[ "$VERSION_ID" != 'VERSION_ID="9"' ]] && [[ "$VERSION_ID" != 'VERSION_ID="14.04"' ]] && [[ "$VERSION_ID" != 'VERSION_ID="16.04"' ]] && [[ "$VERSION_ID" != 'VERSION_ID="17.10"' ]] && [[ "$VERSION_ID" != 'VERSION_ID="18.04"' ]]; then
|
||||||
echo "Your version of Debian/Ubuntu is not supported."
|
echo "Your version of Debian/Ubuntu is not supported."
|
||||||
echo "I can't install a recent version of OpenVPN on your system."
|
echo "I can't install a recent version of OpenVPN on your system."
|
||||||
echo ""
|
echo ""
|
||||||
|
|
@ -89,13 +89,6 @@ newclient () {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Try to get our IP from the system and fallback to the Internet.
|
|
||||||
# I do this to make the script compatible with NATed servers (LowEndSpirit/Scaleway)
|
|
||||||
# and to avoid getting an IPv6.
|
|
||||||
IP=$(ip addr | grep 'inet' | grep -v inet6 | grep -vE '127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -o -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -1)
|
|
||||||
if [[ "$IP" = "" ]]; then
|
|
||||||
IP=$(wget -qO- ipv4.icanhazip.com)
|
|
||||||
fi
|
|
||||||
# Get Internet network interface with default route
|
# Get Internet network interface with default route
|
||||||
NIC=$(ip -4 route ls | grep default | grep -Po '(?<=dev )(\S+)' | head -1)
|
NIC=$(ip -4 route ls | grep default | grep -Po '(?<=dev )(\S+)' | head -1)
|
||||||
|
|
||||||
|
|
@ -146,12 +139,14 @@ if [[ -e /etc/openvpn/server.conf ]]; then
|
||||||
cd /etc/openvpn/easy-rsa/
|
cd /etc/openvpn/easy-rsa/
|
||||||
./easyrsa --batch revoke $CLIENT
|
./easyrsa --batch revoke $CLIENT
|
||||||
EASYRSA_CRL_DAYS=3650 ./easyrsa gen-crl
|
EASYRSA_CRL_DAYS=3650 ./easyrsa gen-crl
|
||||||
rm -rf pki/reqs/$CLIENT.req
|
rm -f pki/reqs/$CLIENT.req
|
||||||
rm -rf pki/private/$CLIENT.key
|
rm -f pki/private/$CLIENT.key
|
||||||
rm -rf pki/issued/$CLIENT.crt
|
rm -f pki/issued/$CLIENT.crt
|
||||||
rm -rf /etc/openvpn/crl.pem
|
rm -f /etc/openvpn/crl.pem
|
||||||
cp /etc/openvpn/easy-rsa/pki/crl.pem /etc/openvpn/crl.pem
|
cp /etc/openvpn/easy-rsa/pki/crl.pem /etc/openvpn/crl.pem
|
||||||
chmod 644 /etc/openvpn/crl.pem
|
chmod 644 /etc/openvpn/crl.pem
|
||||||
|
rm -f $(find /home -maxdepth 2 | grep $CLIENT.ovpn) 2>/dev/null
|
||||||
|
rm -f /root/$CLIENT.ovpn 2>/dev/null
|
||||||
echo ""
|
echo ""
|
||||||
echo "Certificate for client $CLIENT revoked"
|
echo "Certificate for client $CLIENT revoked"
|
||||||
echo "Exiting..."
|
echo "Exiting..."
|
||||||
|
|
@ -194,6 +189,12 @@ if [[ -e /etc/openvpn/server.conf ]]; then
|
||||||
else
|
else
|
||||||
yum remove openvpn -y
|
yum remove openvpn -y
|
||||||
fi
|
fi
|
||||||
|
OVPNS=$(ls /etc/openvpn/easy-rsa/pki/issued | awk -F "." {'print $1'})
|
||||||
|
for i in $OVPNS
|
||||||
|
do
|
||||||
|
rm $(find /home -maxdepth 2 | grep $i.ovpn) 2>/dev/null
|
||||||
|
rm /root/$i.ovpn 2>/dev/null
|
||||||
|
done
|
||||||
rm -rf /etc/openvpn
|
rm -rf /etc/openvpn
|
||||||
rm -rf /usr/share/doc/openvpn*
|
rm -rf /usr/share/doc/openvpn*
|
||||||
# Where are the client files?
|
# Where are the client files?
|
||||||
|
|
@ -225,10 +226,18 @@ else
|
||||||
echo "I need to know the IPv4 address of the network interface you want OpenVPN listening to."
|
echo "I need to know the IPv4 address of the network interface you want OpenVPN listening to."
|
||||||
echo "If your server is running behind a NAT, (e.g. LowEndSpirit, Scaleway) leave the IP address as it is. (local/private IP)"
|
echo "If your server is running behind a NAT, (e.g. LowEndSpirit, Scaleway) leave the IP address as it is. (local/private IP)"
|
||||||
echo "Otherwise, it should be your public IPv4 address."
|
echo "Otherwise, it should be your public IPv4 address."
|
||||||
|
# Autodetect IP address and pre-fill for the user
|
||||||
|
IP=$(ip addr | grep 'inet' | grep -v inet6 | grep -vE '127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -1)
|
||||||
read -p "IP address: " -e -i $IP IP
|
read -p "IP address: " -e -i $IP IP
|
||||||
echo ""
|
echo ""
|
||||||
echo "What port do you want for OpenVPN?"
|
echo "What port do you want for OpenVPN?"
|
||||||
read -p "Port: " -e -i 1194 PORT
|
read -p "Port: " -e -i 1194 PORT
|
||||||
|
# If $IP is a private IP address, the server must be behind NAT
|
||||||
|
if echo "$IP" | grep -qE '^(10\.|172\.1[6789]\.|172\.2[0-9]\.|172\.3[01]\.|192\.168)'; then
|
||||||
|
echo ""
|
||||||
|
echo "This server is behind NAT. What is the public IPv4 address or hostname?"
|
||||||
|
read -p "Public IP address / hostname: " -e PUBLICIP
|
||||||
|
fi
|
||||||
echo ""
|
echo ""
|
||||||
echo "What protocol do you want for OpenVPN?"
|
echo "What protocol do you want for OpenVPN?"
|
||||||
echo "Unless UDP is blocked, you should not use TCP (unnecessarily slower)"
|
echo "Unless UDP is blocked, you should not use TCP (unnecessarily slower)"
|
||||||
|
|
@ -240,15 +249,16 @@ else
|
||||||
echo ""
|
echo ""
|
||||||
echo "What DNS do you want to use with the VPN?"
|
echo "What DNS do you want to use with the VPN?"
|
||||||
echo " 1) Current system resolvers (from /etc/resolv.conf)"
|
echo " 1) Current system resolvers (from /etc/resolv.conf)"
|
||||||
echo " 2) Quad9 (Anycast: worldwide)"
|
echo " 2) Cloudflare (Anycast: worldwide)"
|
||||||
echo " 3) FDN (France)"
|
echo " 3) Quad9 (Anycast: worldwide)"
|
||||||
echo " 4) DNS.WATCH (Germany)"
|
echo " 4) FDN (France)"
|
||||||
echo " 5) OpenDNS (Anycast: worldwide)"
|
echo " 5) DNS.WATCH (Germany)"
|
||||||
echo " 6) Google (Anycast: worldwide)"
|
echo " 6) OpenDNS (Anycast: worldwide)"
|
||||||
echo " 7) Yandex Basic (Russia)"
|
echo " 7) Google (Anycast: worldwide)"
|
||||||
echo " 8) AdGuard DNS (Russia)"
|
echo " 8) Yandex Basic (Russia)"
|
||||||
while [[ $DNS != "1" && $DNS != "2" && $DNS != "3" && $DNS != "4" && $DNS != "5" && $DNS != "6" && $DNS != "7" && $DNS != "8" ]]; do
|
echo " 9) AdGuard DNS (Russia)"
|
||||||
read -p "DNS [1-8]: " -e -i 1 DNS
|
while [[ $DNS != "1" && $DNS != "2" && $DNS != "3" && $DNS != "4" && $DNS != "5" && $DNS != "6" && $DNS != "7" && $DNS != "8" && $DNS != "9" ]]; do
|
||||||
|
read -p "DNS [1-9]: " -e -i 1 DNS
|
||||||
done
|
done
|
||||||
echo ""
|
echo ""
|
||||||
echo "Choose which compression algorithm you want to use:"
|
echo "Choose which compression algorithm you want to use:"
|
||||||
|
|
@ -508,7 +518,7 @@ else
|
||||||
read -n1 -r -p "Press any key to continue..."
|
read -n1 -r -p "Press any key to continue..."
|
||||||
|
|
||||||
if [[ "$OS" = 'debian' ]]; then
|
if [[ "$OS" = 'debian' ]]; then
|
||||||
apt-get install ca-certificates gpg -y
|
apt-get install ca-certificates gnupg -y
|
||||||
# We add the OpenVPN repo to get the latest version.
|
# We add the OpenVPN repo to get the latest version.
|
||||||
# Debian 8
|
# Debian 8
|
||||||
if [[ "$VERSION_ID" = 'VERSION_ID="8"' ]]; then
|
if [[ "$VERSION_ID" = 'VERSION_ID="8"' ]]; then
|
||||||
|
|
@ -646,7 +656,7 @@ WantedBy=multi-user.target" > /etc/systemd/system/iptables.service
|
||||||
mv ~/EasyRSA-3.0.4/ /etc/openvpn/
|
mv ~/EasyRSA-3.0.4/ /etc/openvpn/
|
||||||
mv /etc/openvpn/EasyRSA-3.0.4/ /etc/openvpn/easy-rsa/
|
mv /etc/openvpn/EasyRSA-3.0.4/ /etc/openvpn/easy-rsa/
|
||||||
chown -R root:root /etc/openvpn/easy-rsa/
|
chown -R root:root /etc/openvpn/easy-rsa/
|
||||||
rm -rf ~/EasyRSA-3.0.4.tgz
|
rm -f ~/EasyRSA-3.0.4.tgz
|
||||||
cd /etc/openvpn/easy-rsa/
|
cd /etc/openvpn/easy-rsa/
|
||||||
if [[ $CERT_TYPE == "1" ]]; then
|
if [[ $CERT_TYPE == "1" ]]; then
|
||||||
echo "set_var EASYRSA_ALGO ec
|
echo "set_var EASYRSA_ALGO ec
|
||||||
|
|
@ -702,35 +712,47 @@ ifconfig-pool-persist ipp.txt" >> /etc/openvpn/server.conf
|
||||||
# DNS resolvers
|
# DNS resolvers
|
||||||
case $DNS in
|
case $DNS in
|
||||||
1)
|
1)
|
||||||
|
# Locate the proper resolv.conf
|
||||||
|
# Needed for systems running systemd-resolved
|
||||||
|
if grep -q "127.0.0.53" "/etc/resolv.conf"; then
|
||||||
|
RESOLVCONF='/run/systemd/resolve/resolv.conf'
|
||||||
|
else
|
||||||
|
RESOLVCONF='/etc/resolv.conf'
|
||||||
|
fi
|
||||||
# Obtain the resolvers from resolv.conf and use them for OpenVPN
|
# Obtain the resolvers from resolv.conf and use them for OpenVPN
|
||||||
grep -v '#' /etc/resolv.conf | grep 'nameserver' | grep -E -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | while read line; do
|
grep -v '#' $RESOLVCONF | grep 'nameserver' | grep -E -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | while read line; do
|
||||||
echo "push \"dhcp-option DNS $line\"" >> /etc/openvpn/server.conf
|
echo "push \"dhcp-option DNS $line\"" >> /etc/openvpn/server.conf
|
||||||
done
|
done
|
||||||
;;
|
;;
|
||||||
2) #Quad9
|
2) # Cloudflare
|
||||||
echo 'push "dhcp-option DNS 9.9.9.9"' >> /etc/openvpn/server.conf
|
echo 'push "dhcp-option DNS 1.1.1.1"' >> /etc/openvpn/server.conf
|
||||||
|
echo 'push "dhcp-option DNS 1.0.0.1"' >> /etc/openvpn/server.conf
|
||||||
;;
|
;;
|
||||||
3) #FDN
|
3) # Quad9
|
||||||
|
echo 'push "dhcp-option DNS 9.9.9.9"' >> /etc/openvpn/server.conf
|
||||||
|
echo 'push "dhcp-option DNS 149.112.112.112"' >> /etc/openvpn/server.conf
|
||||||
|
;;
|
||||||
|
4) # FDN
|
||||||
echo 'push "dhcp-option DNS 80.67.169.40"' >> /etc/openvpn/server.conf
|
echo 'push "dhcp-option DNS 80.67.169.40"' >> /etc/openvpn/server.conf
|
||||||
echo 'push "dhcp-option DNS 80.67.169.12"' >> /etc/openvpn/server.conf
|
echo 'push "dhcp-option DNS 80.67.169.12"' >> /etc/openvpn/server.conf
|
||||||
;;
|
;;
|
||||||
4) #DNS.WATCH
|
5) # DNS.WATCH
|
||||||
echo 'push "dhcp-option DNS 84.200.69.80"' >> /etc/openvpn/server.conf
|
echo 'push "dhcp-option DNS 84.200.69.80"' >> /etc/openvpn/server.conf
|
||||||
echo 'push "dhcp-option DNS 84.200.70.40"' >> /etc/openvpn/server.conf
|
echo 'push "dhcp-option DNS 84.200.70.40"' >> /etc/openvpn/server.conf
|
||||||
;;
|
;;
|
||||||
5) #OpenDNS
|
6) # OpenDNS
|
||||||
echo 'push "dhcp-option DNS 208.67.222.222"' >> /etc/openvpn/server.conf
|
echo 'push "dhcp-option DNS 208.67.222.222"' >> /etc/openvpn/server.conf
|
||||||
echo 'push "dhcp-option DNS 208.67.220.220"' >> /etc/openvpn/server.conf
|
echo 'push "dhcp-option DNS 208.67.220.220"' >> /etc/openvpn/server.conf
|
||||||
;;
|
;;
|
||||||
6) #Google
|
7) # Google
|
||||||
echo 'push "dhcp-option DNS 8.8.8.8"' >> /etc/openvpn/server.conf
|
echo 'push "dhcp-option DNS 8.8.8.8"' >> /etc/openvpn/server.conf
|
||||||
echo 'push "dhcp-option DNS 8.8.4.4"' >> /etc/openvpn/server.conf
|
echo 'push "dhcp-option DNS 8.8.4.4"' >> /etc/openvpn/server.conf
|
||||||
;;
|
;;
|
||||||
7) #Yandex Basic
|
8) # Yandex Basic
|
||||||
echo 'push "dhcp-option DNS 77.88.8.8"' >> /etc/openvpn/server.conf
|
echo 'push "dhcp-option DNS 77.88.8.8"' >> /etc/openvpn/server.conf
|
||||||
echo 'push "dhcp-option DNS 77.88.8.1"' >> /etc/openvpn/server.conf
|
echo 'push "dhcp-option DNS 77.88.8.1"' >> /etc/openvpn/server.conf
|
||||||
;;
|
;;
|
||||||
8) #AdGuard DNS
|
9) # AdGuard DNS
|
||||||
echo 'push "dhcp-option DNS 176.103.130.130"' >> /etc/openvpn/server.conf
|
echo 'push "dhcp-option DNS 176.103.130.130"' >> /etc/openvpn/server.conf
|
||||||
echo 'push "dhcp-option DNS 176.103.130.131"' >> /etc/openvpn/server.conf
|
echo 'push "dhcp-option DNS 176.103.130.131"' >> /etc/openvpn/server.conf
|
||||||
;;
|
;;
|
||||||
|
|
@ -862,19 +884,9 @@ verb 3" >> /etc/openvpn/server.conf
|
||||||
chkconfig openvpn on
|
chkconfig openvpn on
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
# Try to detect a NATed connection and ask about it to potential LowEndSpirit/Scaleway users
|
# If the server is behind a NAT, use the correct IP address
|
||||||
EXTERNALIP=$(wget -qO- ipv4.icanhazip.com)
|
if [[ "$PUBLICIP" != "" ]]; then
|
||||||
if [[ "$IP" != "$EXTERNALIP" ]]; then
|
IP=$PUBLICIP
|
||||||
echo ""
|
|
||||||
echo "Looks like your server is behind a NAT!"
|
|
||||||
echo ""
|
|
||||||
echo "If your server is NATed (e.g. LowEndSpirit, Scaleway, or behind a router),"
|
|
||||||
echo "then I need to know the address that can be used to access it from outside."
|
|
||||||
echo "If that's not the case, just ignore this and leave the next field blank"
|
|
||||||
read -p "External IP or domain name: " -e USEREXTERNALIP
|
|
||||||
if [[ "$USEREXTERNALIP" != "" ]]; then
|
|
||||||
IP=$USEREXTERNALIP
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
# client-template.txt is created so we have a template to add further users later
|
# client-template.txt is created so we have a template to add further users later
|
||||||
echo "client" > /etc/openvpn/client-template.txt
|
echo "client" > /etc/openvpn/client-template.txt
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue