全网最全的私网多种穿透互联技术解析
多种业务场景存在私网的情况下需要对网络的互联互通,视情况使用以下多种网络工具进行互联,以下使用的工具都是跨平台的,适用大多数操作系统
Openvpn
前言:
操作系统:Centos6、Centos7、Centos8
openvpn的虚拟网卡是tun/tap驱动程序实现的,也就是说基于 tun/tap 虚拟网卡驱动了隧道包封装。其中,tap表示虚拟的是以太网设备(2层),tun表示虚拟的是点对点设备(3层),这两种设备针对网络包实施不同的封装。
OpenVPN 之 TUN
安装服务端(需有公网IP):
安装openvpn
yum -y install epel-release #添加其它源
yum -y install openssl openvpn easy-rsa
安装最新的easy-rsa
不同的版本yum的easy-rsa 目录不一定,请用locate easyrsa查找后copy到工作目录
mkdir -p /etc/openvpn/server/easyrsa && mkdir -p /etc/openvpn/client && cd /etc/openvpn/server/easyrsa
cp -rf /usr/share/easy-rsa/3.0.8/* .
制作证书文件
我们将创建CA密钥,server端、client端密钥,DH和CRL PEM, TLS认证钥匙ta.key:
./easyrsa init-pki #初始化
./easyrsa build-ca nopass #建立CA证书
./easyrsa gen-req server1 nopass #创建服务器密钥 输入回车
./easyrsa sign-req server server1 #用CA证书签署server1密钥 输入yes
./easyrsa gen-req client1 nopass #创建客户端密钥 输入回车
./easyrsa sign-req client client1 #用CA证书签署client1密钥 输入yes
./easyrsa gen-dh #创建DH密钥
openvpn --genkey --secret ta.key #创建TLS认证密钥
./easyrsa gen-crl #生成CRL密钥
再来个客户端:
./easyrsa gen-req client2 nopass #创建客户端密钥 输入回车
./easyrsa sign-req client client2 #用CA证书签署client1密钥 输入yes
服务端证书:
复制ca证书,ta.key和server端证书及密钥到/etc/openvpn/server文件夹里:
\cp -p pki/ca.crt /etc/openvpn/server/
\cp -p pki/issued/server1.crt /etc/openvpn/server/
\cp -p pki/private/server1.key /etc/openvpn/server/
\cp -p ta.key /etc/openvpn/server/
复制dh.pem , crl.pem到/etc/openvpn/server文件夹里:
\cp pki/dh.pem /etc/openvpn/server/
\cp pki/crl.pem /etc/openvpn/server/
客户端证书:
复制ca证书,ta.key和client端证书及密钥到/etc/openvpn/client文件夹里:
\cp -p pki/ca.crt /etc/openvpn/client/
\cp -p pki/issued/client1.crt /etc/openvpn/client/
\cp -p pki/private/client1.key /etc/openvpn/client/
\cp -p pki/issued/client2.crt /etc/openvpn/client/
\cp -p pki/private/client2.key /etc/openvpn/client/
\cp -p ta.key /etc/openvpn/client/
配置服务端:
添加openvpn服务
# 创建启动文件
root# vim /etc/systemd/system/openvpn.service
[Unit]
Description=OpenVPN Server
After=network.target
After=syslog.target[Install]
WantedBy=multi-user.target[Service]
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/server/server.conf#加载系统服务
root# systemctl daemon-reload
#开机启动
root# systemctl enable openvpn.service
#启动服务
root# systemctl start openvpn.service
#查看服务运行状态
root# systemctl status openvpn.service
详细看我博客
创建服务端配置文件(/etc/openvpn/service/service.conf)内容:
local 0.0.0.0 #监听地址
port 1194 #监听端口
proto udp #监听协议
dev tun #采用路由隧道模式
ca /etc/openvpn/server/ca.crt #ca证书路径
cert /etc/openvpn/server/server1.crt #服务器证书
key /etc/openvpn/server/server1.key # This file should be kept secret 服务器秘钥
dh /etc/openvpn/server/dh.pem #密钥交换协议文件
server 11.11.0.0 255.255.255.0 #给客户端分配地址池,注意:不能和VPN服务器内网网段有相同
ifconfig-pool-persist ipp.txt
#push "redirect-gateway def1 bypass-dhcp" #给网关
push "dhcp-option DNS 8.8.8.8" #dhcp分配dns
client-to-client #客户端之间互相通信
keepalive 10 120 #存活时间,10秒ping一次,120 如未收到响应则视为断线
comp-lzo #传输数据压缩
max-clients 100 #最多允许 100 客户端连接
user nobody #用户
group nobody #用户组
persist-key
persist-tun
status /var/log/openvpn-status.log
log /var/log/openvpn.log
verb 3
客户端证书文件:
ca.crt
client1.crt #之前创建了两个客户端的证书文件,这是其中1 另一个 client2.crt client2.key
client1.key #
ta.key
安装客户端(可以私网):
yum -y install openvpn
mkdir /etc/openvpn
配置客户端
将服务端(/etc/openvpn/client)目录下的证书文件copy到(/etc/openvpn)目录下:
并创建配置文件(/etc/openvpn/client.ovpn):
(一)
client
dev tun
proto udp
remote 110.110.110.110 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client1.crt
key /etc/openvpn/client1.key
comp-lzo
verb 3
(二)
client
dev tun
proto udp
remote 110.110.110.110 1194
resolv-retry infinite
route-nopull #路由全部取消
route 117.156.239.0 255.255.255.0 vpn_gateway #117.x.x.0去往移动的送到vpn gateway
route 11.11.0.0 255.255.255.0 vpn_gateway
nobind
persist-key
persist-tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client2.crt
key /etc/openvpn/client2.key
comp-lzo
verb 3
还可以这样把证书内容集成到配置文件里:
<ca>
... ca证书内容
</ca>
<cert>
... cert证书内容
</cert>
<key>
... key文件内容
</key>
测试连接:
openvpn --config client.ovpn
添加服务:
Centos 7/8:
vi /etc/systemd/system/openvpn.service[Unit]
Description=OpenVPN Client
After=network.target
After=syslog.target[Install]
WantedBy=multi-user.target[Service]
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/test.ovpn#加载系统服务
root# systemctl daemon-reload
#开机启动
root# systemctl enable openvpn.service
#启动服务
root# systemctl start openvpn.service
#查看服务运行状态
root# systemctl status openvpn.service
Centos 6.x
# 配置文件名称为:/etc/openvpn/openvpn.conf
chkconfig openvpn on
关于以上配置的说明:
首先我们通过easy-rsa进行了服务端和多客户端的生成,以便openvpn服务与连接,通过简单的配置,完成了多客户端连接服务器及之间的互通。
需要说明的是,openvpn在指定为tun设备方式时,为3层网络,为了子网的互联进行添加路由需要在服务端的配置文件下发路由及添加服务端路由。当为tap设备方式时,为2层网络桥接方式,相当于客户端连接到一个交换机下面,可能需要手动设置TAP接口的IP /网络掩码。
1、tap可以直接使用route这样的路由表命令,但不能用于手机设备。
2、tun可以用于手机,但不能使用route这样的路由表命令,压根无法穿透。
3、tap和tun的路由配置区别,tap往往结合路由表进行设定下一跳,而tun则往往要和iptables集合紧密来实现下一跳。
所以,如果想要组件VPN实现路由命令进行路由网关的多级跳转,那么需要搭建tap网桥模式。
如果使用了tun模式,那么悲剧的东西要来了,想要实现nat转发,那么你只能选择使用iptables来实现。
客户端之前的内网访问,配置路由:
开启路由转发功能
sed -i ‘/net.ipv4.ip_forward/s/0/1/’ /etc/sysctl.conf
sysctl -p
server:
配置文件里添加:
client-config-dir ccd
route 192.168.100.0 255.255.255.0
push "route 192.168.100.0 255.255.255.0"
新建ccd目录,按客户端的名称创建文件名,用以下发不同的路由
./ccd/client1
iroute 192.168.0.0 255.255.255.0
./ccd/client2
iroute 192.168.100.0 255.255.255.0
OpenVPN 之 TAP
安装TUN/TAP的管理工具tunctl
yum -y install tunctl
测试:
tunctl -b -u root -t tap0 #创建虚拟网卡
ifconfig tap0 10.0.1.2/24 #添加测试IP
ifconfig tap0
tunctl -d tap0 #删除虚拟网卡
其它设置参见:
https://community.openvpn.net/openvpn/wiki/BridgingAndRouting
https://blog.51cto.com/youprince/2043858
真实案列(这回来真的了)
需求:
机器A:(eth0 117.15.23.29–公网),( eth1 192.168.5.88–私网)
机器B:(eth0 192.168.5.14–同机器A的eth1连接),( eth1 10.19.80.57 连接移动的私网 网关:10.19.80.1,业务需要连接IMS服务器的IP:17.56.39.21)
机器C:eth0 172.17.231.174 阿里云私网,映射公网 39.97.15.56
要干嘛:C需要连接IMS服务器:17.56.39.21
开始:
A dnat 端口 1194 指向中192.168.5.14机器的1194 openvpn服务,供 C来连接
A:
iptables -t nat -A PREROUTING -d 117.15.23.29 -p udp --dport 1194 -j DNAT --to 192.168.5.14:1194
iptables -t nat -A POSTROUTING -d 192.168.5.14 -p udp --dport 11194 -j SNAT --to 192.168.5.88
B:
openvpn服务端配置文件:
local 0.0.0.0 #监听地址
port 1194 #监听端口
proto udp #监听协议
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server1.crt #服务器证书
key /etc/openvpn/server1.key
dh /etc/openvpn/dh.pem
server 11.11.0.0 255.255.255.0
client-to-client
push "dhcp-option DNS 8.8.8.8"
client-config-dir ccd
client-to-client #客户端之间互相通信
keepalive 10 120 #存活时间,10秒ping一次,120 如未收到响应则视为断线
comp-lzo #传输数据压缩
max-clients 100 #最多允许 100 客户端连接
user nobody #用户
group nobody #用户组
persist-key
persist-tun
status /var/log/openvpn-status.log
log /var/log/openvpn.log
verb 3
防火墙设置:
iptables -I FORWARD -i tun0 -o eth1 -s 11.11.0.0/24 -d 10.19.80.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -I FORWARD -i tun0 -o eth1 -s 11.11.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -I FORWARD -i eth0 -o eth1 -s 192.168.5.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -t nat -I POSTROUTING -o eth1 -s 11.11.0.0/24 -j MASQUERADE
iptables -t nat -I POSTROUTING -o eth1 -s 192.168.5.0/24 -j MASQUERADE
iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
/etc/sysconfig/iptables文件内容:
防火墙转发可参考官网:https://community.openvpn.net/openvpn/wiki/BridgingAndRouting
*nat
:PREROUTING ACCEPT [1:84]
:POSTROUTING ACCEPT [4:240]
:OUTPUT ACCEPT [4:240]
-A POSTROUTING -s 192.168.5.0/24 -o eth1 -j MASQUERADE
-A POSTROUTING -s 11.11.0.0/24 -o eth1 -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [109:41454]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 1194 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -s 192.168.5.0/24 -i eth0 -o eth1 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 11.11.0.0/24 -i tun0 -o eth1 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -s 11.11.0.0/24 -d 10.19.80.0/24 -i tun0 -o eth1 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
C:
openvpn客户端配置文件:
client
dev tun
proto udp
remote 117.15.23.29 1194
resolv-retry infinite
route-nopull # 路由全部取消
route 17.56.39.0 255.255.255.0 vpn_gateway # 117.x.x.0去往移动的送到vpn gateway
route 11.11.0.0 255.255.255.0 vpn_gateway
route 10.19.80.0 255.255.255.0 vpn_gateway
nobind
persist-key
persist-tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client2.crt
key /etc/openvpn/client2.key
comp-lzo
log /var/log/openvpn.log
verb 3
测试通过!
FRP
SSH
附录
1. openvpn server.conf 详解:
#################################################
# 针对多客户端的OpenVPN 2.0 的服务器端配置文件示例
#
# 本文件用于多客户端<->单服务器端的OpenVPN服务器端配置
#
# OpenVPN也支持单机<->单机的配置(更多信息请查看网站上的示例页面)
#
# 该配置支持Windows或者Linux/BSD系统。此外,在Windows上,记得将路径加上双引号,
# 并且使用两个反斜杠,例如:"C:\\Program Files\\OpenVPN\\config\\foo.key"
#
# '#' or ';'开头的均为注释内容
############################在这里插入代码片######################OpenVPN应该监听本机的哪些IP地址?
#该命令是可选的,如果不设置,则默认监听本机的所有IP地址。
;local a.b.c.d# OpenVPN应该监听哪个TCP/UDP端口?
# 如果你想在同一台计算机上运行多个OpenVPN实例,你可以使用不同的端口号来区分它们。
# 此外,你需要在防火墙上开放这些端口。
port 1194#OpenVPN使用TCP还是UDP协议?
;proto tcp
proto udp# 指定OpenVPN创建的通信隧道类型。
# "dev tun"将会创建一个路由IP隧道,
# "dev tap"将会创建一个以太网隧道。
#
# 如果你是以太网桥接模式,并且提前创建了一个名为"tap0"的与以太网接口进行桥接的虚拟接口,则你可以使用"dev tap0"
#
# 如果你想控制VPN的访问策略,你必须为TUN/TAP接口创建防火墙规则。
#
# 在非Windows系统中,你可以给出明确的单位编号(unit number),例如"tun0"。
# 在Windows中,你也可以使用"dev-node"。
# 在多数系统中,除非你部分禁用或者完全禁用了TUN/TAP接口的防火墙,否则VPN将不起作用。
;dev tap
dev tun# 如果你想配置多个隧道,你需要用到网络连接面板中TAP-Win32适配器的名称(例如"MyTap")。
# 在XP SP2或更高版本的系统中,你可能需要有选择地禁用掉针对TAP适配器的防火墙
# 通常情况下,非Windows系统则不需要该指令。
;dev-node MyTap# 设置SSL/TLS根证书(ca)、证书(cert)和私钥(key)。
# 每个客户端和服务器端都需要它们各自的证书和私钥文件。
# 服务器端和所有的客户端都将使用相同的CA证书文件。
#
# 通过easy-rsa目录下的一系列脚本可以生成所需的证书和私钥。
# 记住,服务器端和每个客户端的证书必须使用唯一的Common Name。
#
# 你也可以使用遵循X509标准的任何密钥管理系统来生成证书和私钥。
# OpenVPN 也支持使用一个PKCS #12格式的密钥文件(详情查看站点手册页面的"pkcs12"指令)
ca ca.crt
cert server.crt
key server.key # 该文件应该保密# 指定迪菲·赫尔曼参数。
# 你可以使用如下名称命令生成你的参数:
# openssl dhparam -out dh1024.pem 1024
# 如果你使用的是2048位密钥,使用2048替换其中的1024。
dh dh1024.pem# 设置服务器端模式,并提供一个VPN子网,以便于从中为客户端分配IP地址。
# 在此处的示例中,服务器端自身将占用10.8.0.1,其他的将提供客户端使用。
# 如果你使用的是以太网桥接模式,请注释掉该行。更多信息请查看官方手册页面。
server 10.8.0.0 255.255.255.0# 指定用于记录客户端和虚拟IP地址的关联关系的文件。
# 当重启OpenVPN时,再次连接的客户端将分配到与上一次分配相同的虚拟IP地址
ifconfig-pool-persist ipp.txt# 该指令仅针对以太网桥接模式。
# 首先,你必须使用操作系统的桥接能力将以太网网卡接口和TAP接口进行桥接。
# 然后,你需要手动设置桥接接口的IP地址、子网掩码;
# 在这里,我们假设为10.8.0.4和255.255.255.0。
# 最后,我们必须指定子网的一个IP范围(例如从10.8.0.50开始,到10.8.0.100结束),以便于分配给连接的客户端。
# 如果你不是以太网桥接模式,直接注释掉这行指令即可。
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100# 该指令仅针对使用DHCP代理的以太网桥接模式,
# 此时客户端将请求服务器端的DHCP服务器,从而获得分配给它的IP地址和DNS服务器地址。
#
# 在此之前,你也需要先将以太网网卡接口和TAP接口进行桥接。
# 注意:该指令仅用于OpenVPN客户端,并且该客户端的TAP适配器需要绑定到一个DHCP客户端上。
;server-bridge# 推送路由信息到客户端,以允许客户端能够连接到服务器背后的其他私有子网。
# (简而言之,就是允许客户端访问VPN服务器自身所在的其他局域网)
# 记住,这些私有子网也要将OpenVPN客户端的地址池(10.8.0.0/255.255.255.0)反馈回OpenVPN服务器。
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"# 为指定的客户端分配指定的IP地址,或者客户端背后也有一个私有子网想要访问VPN,
# 那么你可以针对该客户端的配置文件使用ccd子目录。
# (简而言之,就是允许客户端所在的局域网成员也能够访问VPN)# 举个例子:假设有个Common Name为"Thelonious"的客户端背后也有一个小型子网想要连接到VPN,该子网为192.168.40.128/255.255.255.248。
# 首先,你需要去掉下面两行指令的注释:
;client-config-dir ccd
;route 192.168.40.128 255.255.255.248
# 然后创建一个文件ccd/Thelonious,该文件的内容为:
# iroute 192.168.40.128 255.255.255.248
#这样客户端所在的局域网就可以访问VPN了。
# 注意,这个指令只能在你是基于路由、而不是基于桥接的模式下才能生效。
# 比如,你使用了"dev tun"和"server"指令。# 再举个例子:假设你想给Thelonious分配一个固定的IP地址10.9.0.1。
# 首先,你需要去掉下面两行指令的注释:
;client-config-dir ccd
;route 10.9.0.0 255.255.255.252
# 然后在文件ccd/Thelonious中添加如下指令:
# ifconfig-push 10.9.0.1 10.9.0.2# 如果你想要为不同群组的客户端启用不同的防火墙访问策略,你可以使用如下两种方法:
# (1)运行多个OpenVPN守护进程,每个进程对应一个群组,并为每个进程(群组)启用适当的防火墙规则。
# (2) (进阶)创建一个脚本来动态地修改响应于来自不同客户的防火墙规则。
# 关于learn-address脚本的更多信息请参考官方手册页面。
;learn-address ./script# 如果启用该指令,所有客户端的默认网关都将重定向到VPN,这将导致诸如web浏览器、DNS查询等所有客户端流量都经过VPN。
# (为确保能正常工作,OpenVPN服务器所在计算机可能需要在TUN/TAP接口与以太网之间使用NAT或桥接技术进行连接)
;push "redirect-gateway def1 bypass-dhcp"# 某些具体的Windows网络设置可以被推送到客户端,例如DNS或WINS服务器地址。
# 下列地址来自opendns.com提供的Public DNS 服务器。
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"# 去掉该指令的注释将允许不同的客户端之间相互"可见"(允许客户端之间互相访问)。
# 默认情况下,客户端只能"看见"服务器。为了确保客户端只能看见服务器,你还可以在服务器端的TUN/TAP接口上设置适当的防火墙规则。
;client-to-client# 如果多个客户端可能使用相同的证书/私钥文件或Common Name进行连接,那么你可以取消该指令的注释。
# 建议该指令仅用于测试目的。对于生产使用环境而言,每个客户端都应该拥有自己的证书和私钥。
# 如果你没有为每个客户端分别生成Common Name唯一的证书/私钥,你可以取消该行的注释(但不推荐这样做)。
;duplicate-cn# keepalive指令将导致类似于ping命令的消息被来回发送,以便于服务器端和客户端知道对方何时被关闭。
# 每10秒钟ping一次,如果120秒内都没有收到对方的回复,则表示远程连接已经关闭。
keepalive 10 120# 出于SSL/TLS之外更多的安全考虑,创建一个"HMAC 防火墙"可以帮助抵御DoS攻击和UDP端口淹没攻击。
# 你可以使用以下命令来生成:
# openvpn --genkey --secret ta.key
#
# 服务器和每个客户端都需要拥有该密钥的一个拷贝。
# 第二个参数在服务器端应该为'0',在客户端应该为'1'。
;tls-auth ta.key 0 # 该文件应该保密# 选择一个密码加密算法。
# 该配置项也必须复制到每个客户端配置文件中。
;cipher BF-CBC # Blowfish (默认)
;cipher AES-128-CBC # AES
;cipher DES-EDE3-CBC # Triple-DES# 在VPN连接上启用压缩。
# 如果你在此处启用了该指令,那么也应该在每个客户端配置文件中启用它。
comp-lzo# 允许并发连接的客户端的最大数量
;max-clients 100# 在完成初始化工作之后,降低OpenVPN守护进程的权限是个不错的主意。
# 该指令仅限于非Windows系统中使用。
;user nobody
;group nobody# 持久化选项可以尽量避免访问那些在重启之后由于用户权限降低而无法访问的某些资源。
persist-key
persist-tun# 输出一个简短的状态文件,用于显示当前的连接状态,该文件每分钟都会清空并重写一次。
status openvpn-status.log# 默认情况下,日志消息将写入syslog(在Windows系统中,如果以服务方式运行,日志消息将写入OpenVPN安装目录的log文件夹中)。
# 你可以使用log或者log-append来改变这种默认情况。
# "log"方式在每次启动时都会清空之前的日志文件。
# "log-append"这是在之前的日志内容后进行追加。
# 你可以使用两种方式之一(但不要同时使用)。
;log openvpn.log
;log-append openvpn.log# 为日志文件设置适当的冗余级别(0~9)。冗余级别越高,输出的信息越详细。
#
# 0 表示静默运行,只记录致命错误。
# 4 表示合理的常规用法。
# 5 和 6 可以帮助调试连接错误。
# 9 表示极度冗余,输出非常详细的日志信息。
verb 3# 重复信息的沉默度。
# 相同类别的信息只有前20条会输出到日志文件中。
;mute 20
# 当服务器重启时通知客户端
#可以自动重新连接。必须和udp一起启动
# explicit-exit-notify 1
2. openvpn client.conf 详解:
# 指定这是一个客户端,我们将从服务器获取某些配置文件指令
client# 在大多数系统中,除非你部分禁用或者完全禁用了TUN/TAP接口的防火墙,否则VPN将不起作用。
;dev tap
dev tun# 在Windows系统中,如果你想配置多个隧道,则需要该指令。
# 你需要用到网络连接面板中TAP-Win32适配器的名称(例如"MyTap")。
# 在XP SP2或更高版本的系统中,你可能需要禁用掉针对TAP适配器的防火墙。
;dev-node MyTap# 指定连接的服务器是采用TCP还是UDP协议。
# 这里需要使用与服务器端相同的设置。
;proto tcp
proto udp# 指定服务器的主机名(或IP)以及端口号。
# 如果有多个VPN服务器,为了实现负载均衡,你可以设置多个remote指令。
remote my-server-1 1194
;remote my-server-2 1194# 如果指定了多个remote指令,启用该指令将随机连接其中的一台服务器,
# 否则,客户端将按照指定的先后顺序依次尝试连接服务器。
;remote-random# 启用该指令,与服务器连接中断后将自动重新连接,这在网络不稳定的情况下(例如:笔记本电脑无线网络)非常有用。
resolv-retry infinite# 大多数客户端不需要绑定本机特定的端口号
nobind# 在初始化完毕后,降低OpenVPN的权限(该指令仅限于非Windows系统中使用)
;user nobody
;group nobody# 持久化选项可以尽量避免访问在重启时由于用户权限降低而无法访问的某些资源。
persist-key
persist-tun# 如果你是通过HTTP代理方式来连接到实际的VPN服务器,请在此处指定代理服务器的主机名(或IP)和端口号。
# 如果你的代理服务器需要身份认证,请参考官方手册页面。
;http-proxy-retry # 连接失败时自动重试
;http-proxy [proxy server] [proxy port #]# 无线网络通常会产生大量的重复数据包。设置此标识将忽略掉重复数据包的警告信息。
;mute-replay-warnings# SSL/TLS 参数配置。
# 更多描述信息请参考服务器端配置文件。
# 最好为每个客户端单独分配.crt/.key文件对。
# 单个CA证书可以供所有客户端使用。
ca ca.crt
cert client.crt
key client.key# 指定通过检查证书的nsCertType字段是否为"server"来验证服务器端证书。
# 这是预防潜在攻击的一种重要措施。
#
# 为了使用该功能,你需要在生成服务器端证书时,将其中的nsCertType字段设为"server"
# easy-rsa文件夹中的build-key-server脚本文件可以达到该目的。
ns-cert-type server# 如果服务器端使用了tls-auth密钥,那么每个客户端也都应该有该密钥。
;tls-auth ta.key 1# 指定密码的加密算法。
# 如果服务器端启用了cipher指令选项,那么你必须也在这里指定它。
;cipher x# 在VPN连接中启用压缩。
# 该指令的启用/禁用应该与服务器端保持一致。
comp-lzo# 设置日志文件冗余级别(0~9)。
# 0 表示静默运行,只记录致命错误。
# 4 表示合理的常规用法。
# 5 和 6 可以帮助调试连接错误。
# 9 表示极度冗余,输出非常详细的日志信息。
verb 3# 忽略过多的重复信息。
# 相同类别的信息只有前20条会输出到日志文件中。
;mute 20
全网最全的私网多种穿透互联技术解析相关推荐
- 计算机网络基础(静态路由,动态路由,公网IP,私网IP,NAT技术)
文章目录 一:静态路由和动态路由 二:静态路由的配置路由信息的方式演示 三:默认路由 四:公网IP和私网IP和NAT技术的基本理解 一:静态路由和动态路由 在说静态路由和动态路由前,我们需要来了解一下 ...
- 路由、 网络、互联网、因特网、公网私网IP、NAT技术
路由 在不同网段之间转发数据,需要有路由器的支持 默认情况下,路由器只知道跟他直连的网段,非直连的网段需要通过静态路由.动态路由告诉它. 静态路由 管理员手动添加路由信息(路由表) 适用于小规模网络 ...
- 剑指offer习题详解——替换空格(全网最全详细解答,多种语言,多种解法)
题目描述: 请实现一个函数,把字符串 s 中的每个空格替换成"%20". 示例 1: 输入:s = "We are happy." 输出:"We%20 ...
- TensorFlow 全网最全学习资料汇总之TensorFlow的技术应用
谷歌于2015年11月发布了全新人工智能系统TensorFlow.该系统可被用于语音识别或照片识别等多项机器深度学习领域,主要针对2011年开发的深度学习基础架构DistBelief进行了各方面的改进 ...
- 总结web后端或web全栈开发的多种模式和技术
对web的开发,一般最多会用到三样东西,前端(HTML+CSS+JS+JSON+XML),后端(动态生成代码如servlet或其他CGI程序),数据库(Mysql等). web程序的应用从原始到进化 ...
- 【重磅来袭】这绝对是全网最全的Springboot面试题
前言 长期整合常面试考点,喜欢的可以收藏.Java面试题目大纲导航 正文 Spring Boot 几乎是微服务中最好的 Java 框架. 本文不仅仅只是Spring Boot的面试题,而是构架地整理出 ...
- Flink 全网最全资源(视频、博客、PPT、入门、原理、实战、性能调优、源码解析、问答等持续更新)
Flink 学习 https://github.com/zhisheng17/flink-learning 麻烦路过的各位亲给这个项目点个 star,太不易了,写了这么多,算是对我坚持下来的一种鼓励吧 ...
- Flink 全网最全资源(视频、博客、PPT、入门、实战、源码解析、问答等持续更新)...
Flink 学习 github.com/zhisheng17/- 麻烦路过的各位亲给这个项目点个 star,太不易了,写了这么多,算是对我坚持下来的一种鼓励吧! 本项目结构 博客 1.Flink 从0 ...
- mapper命名规范_Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件
封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( ...
- 网络 网络层 | IP协议、网段划分、公网与私网、路由选择
网络层是用信子网的边界,是通信设备的协议最高层.其功能是负责地址管理与路由选择(为每一条网络中的数据根据想去的地方选择合适的路径),典型的协议是IP协议,典型的设备是路由器 IP协议 IP协议的工作类 ...
最新文章
- 【湖南】2021年下半年软考报考时间及通知
- php symbol table,gdb方式遍历EG(symbol_table) 哈希表的key_PHP教程
- JVM的内存区域划分
- html字段值换行代码怎么写,HTML段落,换行,字符实体
- [转载] python set集合如何有序输出_python set集合的用法
- u盘读写速度变慢了开始快后面特别慢卡顿解决方法
- SQLCODE 错误对照表
- Multisim实现D触发器模拟异步计数器
- 不要以为过了技术面就安全了,HR面也会挂人的!!
- 计算机专硕都是数二英二吗,【专硕初试】大改革?英二、数二都不考了?
- java实例分析宠物商店_Java实现宠物商店管理
- TZC Python编程入门教程 ————题解
- 数据库及SQL语句入门教程
- 微软IT如何规划和构建的企业私有云基础设施
- Ubuntu部署轻量化工具supervisor
- 头条.搜索历史记录,文章详情页
- 教你随心所欲的操作希尔排序,而不是死记希尔模板。它的精髓,你知道吗?
- Coding and Paper Letter(六十三)
- windows计划任务
- (数论)(枚举)(前缀和)1230. K倍区间