Ubuntu 20.04 LTS在5分钟内设置OpenVPN服务器

时间:2020-01-09 10:45:30  来源:igfitidea点击:

如何在Ubuntu Linux版本20.04 LTS服务器上设置OpenVPN服务器,以保护我的浏览活动免受公共Wi-Fi上的恶意攻击,在连接到4G LTE网络时对所有流量进行加密等等?
简介OpenVPN是非常流行的功能齐全的SSL VPN(虚拟专用网络)软件。
它使用SSL/TLS协议实现OSI第2层或者第3层安全网络扩展。
像许多其他流行软件一样,它是开源的免费软件,并在GNU GPL下分发。

VPN使您可以安全地连接到不安全的公共网络,例如机场或者酒店的wifi网络。
在许多企业和政府机构中,需要VPN才能访问您的公司服务器资源。
另一个广泛使用的方法是绕过受地理限制的网站/应用程序,并提高您的在线隐私或者安全性。
本教程提供了在Ubuntu Linux 20.04 LTS服务器上配置OpenVPN服务器的分步说明。

过程:Ubuntu 20.04 LTS在5分钟内设置OpenVPN服务器

步骤如下:

步骤1更新系统

首先,运行apt命令以应用安全更新:

sudo apt update
sudo apt upgrade

步骤2查找并记下您的IP地址

使用ip命令,如下所示:

ip a
ip a show eth0

或者,我们可以运行以下dig命令/主机命令以从Linux命令行本身查找我们的公共IP地址:

dig +short myip.opendns.com @resolver1.opendns.com
## Get IPv4 ##
dig -4 +short myip.opendns.com @resolver1.opendns.com
## Find IPv6 ##
dig -6 +short myip.opendns.com @resolver1.opendns.com
## 或者
dig TXT +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'"' '{ print }'

有关分配给服务器的IP地址的说明

大多数云服务器和裸机服务器都有ISP提供的两种IP地址:

  • "公共静态IP地址直接"分配给您的设备并从Internet路由。例如,Linode,Digital Ocean等可以为您提供直接的公共IP地址。
  • 直接连接到服务器的静态静态IP地址,而您的服务器位于具有公共IP地址的NAT后面。例如,AWS EC2/Lightsail为您提供了这种NAT公用IP地址。

该脚本将自动检测您的网络设置。
您所要做的就是在要求时提供正确的IP地址。

步骤3下载并运行openvpn-install.sh脚本

我将如下使用wget命令:

wget https://git.io/vpn -O openvpn-ubuntu-install.sh

现在,我们下载了脚本,现在该使它可执行了。
因此,使用chmod命令设置权限:

chmod -v +x openvpn-ubuntu-install.sh
`mode of 'openvpn-ubuntu-install.sh' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)`

可以使用文本编辑器(例如nano/vim)查看脚本:

nano openvpn-ubuntu-install.sh

运行openvpn-ubuntu-install.sh脚本以安装OpenVPN服务器

现在您要做的就是:

sudo ./openvpn-ubuntu-install.sh

来自我的云服务器位于NAT后面的AWS/Lightsail的示例会话:来自具有云服务器直接公共IPv4地址的Linode/DO服务器的示例会话:我强烈建议您始终将DNS服务器选项选择为1.1.1.1或者只要您信任,就可以使用Google DNS或者任何其他DNS服务。
确保选择快速的地理分布的DNS服务器,并且可以从Internet上的任何位置进行访问。
最后,我们应该看到以下信息:

您的客户端配置可在以下位置获得:/root/linuxdesktop.ovpn如果要添加更多客户端,只需再次运行此脚本!

如何在Ubuntu 20.04 LTS上启动/停止/重启OpenVPN服务器?

我们需要使用systemctl命令,如下所示:

停止OpenVPN服务器
sudo systemctl stop [email protected]
启动OpenVPN服务器
sudo systemctl start [email protected]
更改配置选项后重新启动OpenVPN服务器
sudo systemctl restart [email protected]
显示OpenVPN服务器的状态
sudo systemctl status [email protected]

步骤4使用iOS/Android/Linux/Windows桌面客户端连接OpenVPN服务器

在服务器上,您将找到一个名为/root/linuxdesktop.ovpn的客户端配置文件。
您所要做的就是使用scp命令将此文件复制到本地桌面:

scp [email protected]:/root/linuxdesktop.ovpn .

如果不允许root用户登录服务器,请尝试以下scp命令:

ssh [email protected] "sudo -S cat /root/linuxdesktop.ovpn" > linuxdesktop.ovpn

接下来,将此文件提供给您的OpenVPN客户端以进行连接:

  • Apple iOS客户端
  • Android客户端
  • Apple MacOS(OS X)客户端
  • Windows 8/10客户端

Linux桌面:OpenVPN客户端配置

首先,使用yum命令/dnf命令/apt命令为您的桌面安装openvpn客户端:

sudo dnf install openvpn

或者

sudo apt install openvpn

接下来,按如下所示复制desktop.ovpn:

sudo cp linuxdesktop.ovpn /etc/openvpn/client.conf

从CLI测试连接性:

sudo openvpn --client --config /etc/openvpn/client.conf

使用openvpn脚本/服务重新启动计算机时,您的Linux系统将自动连接:

sudo systemctl start openvpn@client # <--- start client service

步骤5验证/测试连接

只需访问此页面即可检查您的IP地址,并将其更改为VPN服务器IP地址。
接下来,从Linux桌面连接到OpenVPN服务器后,执行以下命令:

ping 10.8.0.1 #Ping to the OpenVPN server gateway
ip route #Make sure routing setup working
## the following must return public IP address of OpenVPN server ##
dig TXT +short o-o.myaddr.l.google.com @ns1.google.com

有关解决OpenVPN服务器和客户端问题的说明

在Ubuntu 20.04 Linux LTS服务器上执行以下命令。
首先,检查OpenVPN服务器是否存在错误:

sudo journalctl --identifier openvpn
-- Logs begin at Tue 2020-06-16 08:53:36 UTC, end at Tue 2020-06-16 09:09:57 UTC. -
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: OpenVPN 2.4.7 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Sep  5 2019
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: library versions: OpenSSL 1.1.1f  31 Mar 2020, LZO 2.10
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: Diffie-Hellman initialized with 2048 bit key
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: Outgoing Control Channel Encryption: Cipher 'AES-256-CTR' initialized with 256 bit key
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: Outgoing Control Channel Encryption: Using 256 bit message hash 'SHA256' for HMAC authentication
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: Incoming Control Channel Encryption: Cipher 'AES-256-CTR' initialized with 256 bit key
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: Incoming Control Channel Encryption: Using 256 bit message hash 'SHA256' for HMAC authentication
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: TUN/TAP device tun0 opened
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: TUN/TAP TX queue length set to 100
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: /sbin/ip link set dev tun0 up mtu 1500
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: /sbin/ip addr add dev tun0 10.8.0.1/24 broadcast 10.8.0.255
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: /sbin/ip -6 addr add fddd:1194:1194:1194::1/64 dev tun0
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: Could not determine IPv4/IPv6 protocol. Using AF_INET
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: Socket Buffers: R=[212992->212992] S=[212992->212992]
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: UDPv4 link local (bound): [AF_INET]45.79.125.234:1194
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: UDPv4 link remote: [AF_UNSPEC]
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: GID set to nogroup
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: UID set to nobody
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: MULTI: multi_init called, r=256 v=256
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: IFCONFIG POOL IPv6: (IPv4) size=252, size_ipv6=65536, netbits=64, base_ipv6=fddd:1194:1194:1194::1000
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: IFCONFIG POOL: base=10.8.0.2 size=252, ipv6=1
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: IFCONFIG POOL LIST
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: Initialization Sequence Completed

服务器上的防火墙规则设置正确吗?
使用cat命令查看规则:

sudo cat /etc/systemd/system/openvpn-iptables.service

配置:

[Unit]
Before=network.target
[Service]
Type=oneshot
ExecStart=/sbin/iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to 172.104.177.197
ExecStart=/sbin/iptables -I INPUT -p udp --dport 1194 -j ACCEPT
ExecStart=/sbin/iptables -I FORWARD -s 10.8.0.0/24 -j ACCEPT
ExecStart=/sbin/iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
ExecStop=/sbin/iptables -t nat -D POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to 172.104.177.197
ExecStop=/sbin/iptables -D INPUT -p udp --dport 1194 -j ACCEPT
ExecStop=/sbin/iptables -D FORWARD -s 10.8.0.0/24 -j ACCEPT
ExecStop=/sbin/iptables -D FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
ExecStart=/sbin/ip6tables -t nat -A POSTROUTING -s fddd:1194:1194:1194::/64 ! -d fddd:1194:1194:1194::/64 -j SNAT --to 2400:8901::f03c:92ff:fe3e:cf92
ExecStart=/sbin/ip6tables -I FORWARD -s fddd:1194:1194:1194::/64 -j ACCEPT
ExecStart=/sbin/ip6tables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
ExecStop=/sbin/ip6tables -t nat -D POSTROUTING -s fddd:1194:1194:1194::/64 ! -d fddd:1194:1194:1194::/64 -j SNAT --to 2400:8901::f03c:92ff:fe3e:cf92
ExecStop=/sbin/ip6tables -D FORWARD -s fddd:1194:1194:1194::/64 -j ACCEPT
ExecStop=/sbin/ip6tables -D FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target

另一个选择是运行iptables命令和sysctl命令命令来验证服务器上的NAT规则设置:

sudo iptables -t nat -L -n -v
sysctl net.ipv4.ip_forward
sudo cat /etc/sysctl.d/30-openvpn-forward.conf

NAT防火墙OpenVPN规则验证

OpenVPN服务器是否正在运行并且端口是否打开?
使用ss命令或者netstat命令以及pidof命令/ps命令:

sudo systemctl start openvpn-iptables.service
sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -p -f /etc/sysctl.d/30-openvpn-forward.conf

如果未运行,请重新启动OpenVPN服务器:

netstat -tulpn | grep :1194 ## 1194 is the openvpn server port ##
ss -tulpn | grep :1194 ## 1194 is the openvpn server port ##
ps aux | grep openvpn ## is the openvpn server running? ##
ps -C openvpn ## is the openvpn server running? ##
pidof openvpn ## find the openvpn server PID ##

注意错误:

sudo systemctl restart [email protected]

Linux桌面客户端可以连接到OpenVPN服务器计算机吗?
首先,您需要运行一个简单的测试,以查看OpenVPN服务器端口(UDP 1194)是否接受连接:

sudo systemctl status [email protected]

如果未连接,则意味着Linux桌面防火墙或者您的路由器正在阻止对服务器的访问。
确保客户端和服务器使用相同的协议和端口,例如UDP端口1194。

nc -vu 172.104.177.197 1194
`Connection to 172.104.177.197 port [udp/openvpn] succeeded!`

恭喜你您已在云中运行的Ubuntu Linux 20.04 LTS服务器上成功设置了OpenVPN服务器。