Ubuntu 20.04 LTS在5分钟内设置OpenVPN服务器
如何在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服务器。