VPN或虚拟专用网络是通过互联网等公共网络的安全专用网络。 VPN是通过互联网的安全通道,可保护您的数据流量,增加互联网隐私和安全性。 对VPN的访问受到安全认证方式的限制。
OpenVPN是构建虚拟专用网络的开源软件,它使用OpenSSL库来加密隧道数据并支持UDP或TCP传输。 OpenVPN可以使用预共享密钥,基于证书和基于用户名/密码的身份验证机制。
在本教程中,我将介绍如何在Linux操作系统OpenSUSE Leap 42.1下使用OpenVPNvpn实现虚拟专用网。
先决条件
- OpenSUSE Leap 42.1 - 64bit
- 根权限
- 启用TUN / TAP
第1步 - 检查是否启用TUN / TAP
如果要在服务器上创建VPN,请确保已安装并启用TUN / TAP。 您可以使用以下命令检查:
cat /dev/net/tun
结果应该是:
cat: /dev/net/tun: File descriptor in bad state
第2步 - 安装OpenVPN
OpenVPN在OpenSUSE存储库中可用。 您可以使用zypper命令安装它:
zypper in openvpn
第3步 - Easy-RSA设置
接下来,下载easy-rsa来生成证书文件。 easy-rsa是管理证书的实用程序,您可以创建根证书颁发机构并请求并签署证书。
转到OpenVPN目录,并使用wget命令下载easy-rsa:
cd /etc/openvpn/
wget https://github.com/OpenVPN/easy-rsa/archive/release/2.x.zip
提取存档并移动easy-rsa目录:
unzip 2.x.zip
mv easy-rsa-release-2.x/easy-rsa/ /etc/openvpn/
rm -rf easy-rsa-release-2.x/
配置密钥
转到easy-rsa目录并编辑vars文件以配置密钥和证书:
cd easy-rsa/2.0/
vim vars
第53行 - 如果你真的偏执,你可以增加键的大小。
export KEY_SIZE=2048
第56和59行 - 密钥和证书将在几天内到期。
export CA_EXPIRE=3650
export KEY_EXPIRE=3650
行64 - 72 - 更改密钥和证书信息的默认值。
export KEY_COUNTRY="US"
export KEY_PROVINCE="California"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_OU="MyOrganizationalUnit"
export KEY_NAME="EasyRSA"
保存文件并退出。
初始化PKI
接下来,初始化PKI(公钥基础设施):
source ./vars && ./clean-all && ./build-ca
我们将离开默认值,只需按“Enter”。
生成Diffie Hellman参数
运行命令如下:
./build-dh
你会看到输出:
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
..................................
生成服务器私钥
生成名为“server”的私钥:
./build-key-server server
按enter键并输入“y”确认生成键。
为客户生成密钥和证书
生成名称为“client1”的客户端密钥和证书:
./build-key client1
按enter键并输入“y”确认密钥生成。
密钥和证书已经在目录“keys”中生成。 现在创建一个“keys”目录的副本并将其放在“openvpn”目录中。
cp -r keys/ /etc/openvpn/
第4步 - 配置OpenVPN
在这一步中,我们将配置OpenVPN在UDP协议上运行,使用端口2034进行客户端连接。 在OpenVPN目录中创建新的配置文件server.conf。
cd /etc/openvpn/
vim server.conf
粘贴以下配置:
#change with your port
port 2034
#You can use udp or tcp
proto udp
# "dev tun" will create a routed IP tunnel.
dev tun
#Certificate Configuration
#ca certificate
ca /etc/openvpn/keys/ca.crt
#Server Certificate
cert /etc/openvpn/keys/server.crt
#Server Key and keep this is secret
key /etc/openvpn/keys/server.key
#See the size a dh key in /etc/openvpn/keys/
dh /etc/openvpn/keys/dh2048.pem
#Internal IP will get when already connect
server 10.10.2.0 255.255.255.0
#this line will redirect all traffic through our OpenVPN
push "redirect-gateway def1"
#Provide DNS servers to the client, you can use goolge DNS
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
#Enable multiple client to connect with same key
duplicate-cn
keepalive 20 60
comp-lzo
persist-key
persist-tun
daemon
#openvpn status log
status /var/log/openvpn/openvpn-status.log
#enable log
log-append /var/log/openvpn/openvpn.log
#Log Level
verb 3
保存文件并退出编辑器。
接下来,为openvpn日志创建一个新的目录和文件:
mkdir -p /var/log/openvpn/
touch /var/log/openvpn/{openvpn,openvpn-status}.log
第5步 - 配置SuSEfirewall2
SuSEfirewall2是基于文件“/ etc / sysconfig / SuSEfirewall2”生成iptables规则的脚本。 我们将安装SuSEfirewall2,然后配置端口访问OpenVPN,然后我们将使用OpenVPN的iptables脚本启用NAT。
使用zypper命令安装SuSEfirewall2:
zypper in SuSEfirewall2
现在,转到sysconfig目录,并编辑SuSEfirewall2配置文件:
cd /etc/sysconfig/
vim SuSEfirewall2
Line 134 - 启用路由。
FW_ROUTE="yes"
行253 - 从网络外部启用TCP端口22用于SSH访问。
FW_SERVICES_EXT_UDP="22"
行267 - 启用openvpn客户端访问的udp端口 - 端口2034。
FW_SERVICES_EXT_UDP="2034"
行877 - 启用自定义规则SuSEfirewall2。
FW_CUSTOMRULES="/etc/sysconfig/scripts/SuSEfirewall2-custom"
保存并退出。
接下来,编辑脚本目录中的SuSEfirewall2自定义规则。
cd /etc/sysconfig/scripts/
vim SuSEfirewall2-custom
在“fw_custom_after_chain_creation”指令内,粘贴新的iptables规则为OpenVPN:
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.10.2.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.10.2.0/24 -o eth0 -j MASQUERADE
保存并退出。
注意:
IP 10.10.2.0/24是来自server.conf OpenVPN配置文件的网络。
现在我们可以通过将这个新的配置行添加到sysctl.conf文件来启用转发。
vim /etc/sysctl.conf
粘贴配置如下:
net.ipv4.ip_forward = 1
保存并退出。
注意:
如果文件中已经有行,请将值从“0”更改为“1”,而不是添加新行。
现在运行下面的命令来应用配置更改。
sysctl -p
启动SuSEfirewall2和OpenVPN服务器:
systemctl start SuSEfirewall2
systemctl start openvpn@server
如果您有错误,可以在OpenVPN日志中看到详细的错误信息。
将所有服务添加到系统启动:
systemctl enable SuSEfirewall2
systemctl enable openvpn@server
第5步 - 配置客户端
将密钥目录中的客户端密钥和证书下载到本地计算机。 你可以使用scp命令或sftp,我在这里使用scp:
必须在本地计算机上运行的命令。
scp root@serverip:~/etc/openvpn/keys/ca.crt ~/myvpn/
scp root@serverip:~/etc/openvpn/keys/client1.crt ~/myvpn/
scp root@serverip:~/etc/openvpn/keys/client1.key ~/myvpn/
在myvpn目录中,为客户端“client1.ovpn”创建一个新的配置文件。
cd ~/myvpn/
vim client1.ovpn
粘贴以下配置:
client
dev tun
proto udp
#Server IP and Port
remote SERVERIP 2034
resolv-retry infinite
nobind
persist-key
persist-tun
mute-replay-warnings
ca ca.crt
cert client1.crt
key client1.key
ns-cert-type server
comp-lzo
保存并退出。
要连接到我们的VPN,您可以安装VPN客户端,或者使用Linux,您可以使用“网络管理器”。 如果要使用终端测试VPN,可以使用以下命令:
cd ~/myvpn/
sudo openvpn --config client1.ovpn
参考
https://en.opensuse.org/SDB:OpenVPN_Installation_and_Setup
https://www.youcl.com/tutorial/how-to-install-openvpn-on-centos-7/