编辑 最后修改时间 2023/08/17 16:07
使用OpenVPN组建内网
服务端
下载自己需要的版本
https://swupdate.openvpn.org/community/releases/openvpn-2.6.5.tar.gz
安装服务端
$ wget https://swupdate.openvpn.org/community/releases/openvpn-2.6.5.tar.gz
$ tar -zxf openvpn-2.6.5.tar.gz
$ cd openvpn-<version>
$ ./configure
$ make
$ sudo make install
配置服务端
// 没有这个目录就自己创建一个
$ cd /etc/openvpn
$ vim server.conf
// server.conf 内容如下
port 8890
proto tcp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ip.txt
push "route 10.8.0.0 255.255.255.0"
# push "redirect-gateway def1 bypass-dhcp"
# push "dhcp-option DNS 223.5.5.5"
# push "dhcp-option DNS 223.6.6.6"
client-to-client
keepalive 10 120
user www
group www
persist-key
persist-tun
status /etc/openvpn/status.log
verb 3
生成dh.pem
$ cd /etc/openvpn
$ openssl dhparam -out dh.pem 2048
安装Easy-RSA工具
Easy-RSA是一个用于生成证书和密钥的工具集
$ sudo apt-get install easy-rsa
$ cd /usr/share/easy-rsa/
// 初始化 PKI
$ ./easyrsa init-pki
生成 CA(证书授权机构)证书和密钥
$ cd /usr/share/easy-rsa/
// 生成 CA(证书授权机构)证书和密钥
$ ./easyrsa build-ca
// 生成服务器证书和密钥
$ ./easyrsa gen-req server nopass
// 签署服务器证书
$ ./easyrsa sign-req server server
// 把生成的证书复制在 /etc/openvpn
$ cp /usr/share/easy-rsa/pki/ca.crt /etc/openvpn/
$ cp /usr/share/easy-rsa/pki/issued/server.crt /etc/openvpn/
$ cp /usr/share/easy-rsa/pki/private/server.key /etc/openvpn/
生成客户端证书
// 生成客户端证书和密钥
$ ./easyrsa gen-req client nopass
// 签署客户端证书
$ ./easyrsa sign-req client client
// 导出证书和密钥
$ ./easyrsa export-p12 client
客户端
你也可以通过我提供的下载链接直接下载
https://swupdate.openvpn.org/community/releases/OpenVPN-2.6.4-I001-amd64.msi
// sxin.ovpn 文件内容如下
client
dev tun
proto tcp
remote vpn.jsx6.com 8890
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
# comp-lzo
verb 3
问题处理
checking for PKCS11_HELPER... no
checking for LIBNL_GENL... no
configure: error: libnl-genl-3.0 package not found or too old. Is the development package and pkg-config installed? Must be version 3.4.0 or newer for DCO
# 安装 libnl-genl-3.0 开发包
sudo yum install libnl3-devel
# 安装 pkg-config
sudo yum install pkgconfig
# 确认 libnl-genl 版本
pkg-config --modversion libnl-genl-3.0
3.2.28 # 版本号低于3.4.0,尝试更新或升级 libnl-genl 包
版本号低于3.4.0,尝试更新或升级 libnl-genl 包
sudo yum update
# 手动编译 libnl-genl
# 下载 libnl 源码
wget https://github.com/thom311/libnl/releases/download/libnl3_5_0/libnl-3.5.0.tar.gz
tar -xzvf libnl-3.5.0.tar.gz
cd libnl-3.5.0
# 编译和安装
./configure
make
sudo make install
# 继续编译 openvpn
cd ~/openvpn-2.6.5/
set -x LDFLAGS "-Wl,-rpath -Wl,/usr/local/lib"
set -x PKG_CONFIG_PATH "/usr/local/lib/pkgconfig"
# 验证版本号
pkg-config --modversion libnl-genl-3.0
3.5.0
./configure
mv -f $depbase.Tpo $depbase.Po
dco_linux.c: 在函数‘ovpn_nl_cb_error’中:
dco_linux.c:303:27: 错误:‘NLMSGERR_ATTR_MAX’未声明(在此函数内第一次使用)
struct nlattr *tb_msg[NLMSGERR_ATTR_MAX + 1];
^
dco_linux.c:303:27: 附注:每个未声明的标识符在其出现的函数内只报告一次
dco_linux.c:311:30: 错误:‘NLM_F_ACK_TLVS’未声明(在此函数内第一次使用)
if (!(nlh->nlmsg_flags & NLM_F_ACK_TLVS))
^
dco_linux.c:316:30: 错误:‘NLM_F_CAPPED’未声明(在此函数内第一次使用)
if (!(nlh->nlmsg_flags & NLM_F_CAPPED))
^
dco_linux.c:330:16: 错误:‘NLMSGERR_ATTR_MSG’未声明(在此函数内第一次使用)
if (tb_msg[NLMSGERR_ATTR_MSG])
^
dco_linux.c:303:20: 警告:未使用的变量‘tb_msg’ [-Wunused-variable]
struct nlattr *tb_msg[NLMSGERR_ATTR_MAX + 1];
^
dco_linux.c: 在文件作用域:
cc1: 警告:无法识别的命令行选项“-Wno-stringop-truncation” [默认启用]
make[3]: *** [dco_linux.o] 错误 1
make[3]: 离开目录“/home/www/openvpn-2.6.5/src/openvpn”
make[2]: *** [all-recursive] 错误 1
make[2]: 离开目录“/home/www/openvpn-2.6.5/src”
make[1]: *** [all-recursive] 错误 1
make[1]: 离开目录“/home/www/openvpn-2.6.5”
make: *** [all] 错误 2
这个错误提示表明在编译 dco_linux.c
文件时出现了问题,缺少一些宏定义或头文件。在新版本的编译器中,一些宏和标志可能已经改变,导致了这些错误。
./configure CFLAGS="-DNLMSGERR_ATTR_MAX=16 -DNLM_F_ACK_TLVS=0x200 -DNLM_F_CAPPED=0x100 -DNLMSGERR_ATTR_MSG=0"
make