站点到站点的VPN网络
实验需求:现在需要不同局域网之间的服务器能够进行通信,并且是通过安全的加密通道实现,并在Linux中启用路由功能,通过安全隧道进行包的转发,从而实现两个网络的连接。
实验环境:两台Linux服务器,每一台Linux服务器上由两块网卡,其中一块网卡需要和互联网连接一起,这也就是WAN接口的作用。其次在每一台Linux服务器上启用路由功能来扮演路由器的功能。VPN的隧道IP就是10.200.0.0/24。内网IP就是172.16.11.0/24,172.16.12.0/24网端,LAN接口的IP是内网网关。最后就是每个网段都由一个客户端,最终实现不同网段之间的互通。
实验规划:
VPN服务器
|
WAN
|
TUN
|
LAN
|
VPN1
|
192.168.9.130
|
10.200.0.1
|
192.168.16.1(充当网关)
|
VPN2
|
192.168.9.132
|
10.200.0.2
|
192.168.17.1(充当网关)
|
client1(不可访问外网)
|
无
|
无
|
192.168.16.10
|
client2(不可访问外网)
|
无
|
无
|
192.168.17.10
|
前面的节点创建,IP配置不在演示,(但是要注意一点:网络模式是host only的不需要设置网关,这个也是我一直的误区。)这里开始从将VPN1开启路由记录:
1、开启节点路由功能:
echo 1 > /proc/sys/net/ipv4/ip_forward
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
2、创建配置文件
dev tun
proto udp
local 192.168.9.130
lport 1194
remote 192.168.9.132
rport 1194
secret aa.key
ifconfig 10.200.0.1 10.200.0.2
user nobody
group nobody
persist-tun
persist-key
keepalive 10 60
ping-timer-rem
verb 3
daemon
log-append /tmp/openvpn.log
选项参数讲解:
local host:功能:设置用于绑定OpenVPN服务的本地机器的名字或IP地址,如果指定了,那么OpenVPN服务仅绑定到这个地址上。如果没有指定,那么OpenVPN服务将会监听所有网卡。
remote host:指定远程主机名称或IP地址,可指定多个--remote,实现冗余,如果使用DNS名字,可通过DNS的轮询功能,实现简单的负载均衡。
port:设定本地和远程的机器TCP/UDP端口号,注意这里设置时客户端、服务端全部设置了
lport:设定本地主机绑定的TCP/UDP端口,这个时更细致的端口设置,只设置本地主机的端口号
rport:只设定远程主机的TCP/UDP端口
persist-tun、persist-key:如果运行UP/DOWN脚本并通过SIGUSR1或者--ping-restart来重启OpenVPN时,不要关闭和重新打开TUN/TAP设备。persist-key和persist-tun相似,不重新读取key文件。
对端检测预处理:OpenVPN有两个通道:数据通道,控制通道,检测发生在控制通道中
ping n:如果n秒内没有发送数据包,那么就在控制通道上ping远程的机器。
ping-exit n:如果n秒之后没有从远程收到ping或者其它数据包,那么OpenVPN服务器将会退出。
ping-restart n:与ping-exit相似,只不过是通过发SIGUSR1信息来重启OpenVPN服务器。
ping-timer-rem:这个就是是否启用以上功能,前提是如果有远程地址,那么就运行ping-exit、ping-restart定时器。
keepalive n m:类似于ping的功能,会在连接上来回发送类似于ping的信号,以便于发现某一端断掉,n是时间间隔,每个多少秒ping一次,m表示ping之后多少秒没有收到回应,则表示对方已经断开。
日志选项:
log file:将输出日志信息写入到指定文件。
logappend file:将输出日志信息追加到指定文件,追加文件尾部。
3、VPN1运行配置:
[root@vpn1 ~]
Thu Jun 16 21:18:41 2022 read UDP [ECONNREFUSED|ECONNREFUSED]: Connection refused (code=111)
Thu Jun 16 21:18:45 2022 read UDP [ECONNREFUSED]: Connection refused (code=111)
Thu Jun 16 21:18:49 2022 read UDP [ECONNREFUSED]: Connection refused (code=111)
4、VPN2运行配置:
local 192.168.9.132
remote 192.168.9.130
ifconfig 10.200.0.2 10.200.0.1
5、client配置
可以借助命令:route -n分析
这是个重点:现在我使用公司总部里面的PC(client2)去ping分支办公室里面的VPN服务器上面的TUN(10.200.0.1)
如果VPN2、client2的网卡配置信息没有错误那应该是clinet2可以ping通VPN2的TUN,WAN,LAN
但是你会发现client2无法ping通VPN1的TUN,这时为什么呢?ping不同肯定就是要么去的包不通,要么回来的包不通。
那现在分析下过程:首先client2发包:src-192.168.17.10,des-10.200.0.1,client2找到网关将包转发至VPN2,
VPN2发现des-10.200.0.1肯定需要多次封装,先经过TUN(虚拟网卡)隧道加密封装(src-10.200.0.2,des=10.200.0.1),在经过物理网卡封装(src-192.168.9.132,des-192.168.9.130),这样通过直连就将数据包转发至VPN1了,然后VPN1在进行层层解封装、层层封装,最终需要回应数据包(src-10.200.0.1,des-192.168.17.10)。
这时就出现问题了,会发现VPN1中根本找不到去往192.168.17.10的路由,因此问题就出现在这里。
解决办法:在VPN1中添加一条去往192.168.17.10的路由:
#这是原路由条目
[root@vpn1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.9.2 0.0.0.0 UG 100 0 0 ens33
0.0.0.0 192.168.16.2 0.0.0.0 UG 101 0 0 ens37
10.200.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
192.168.9.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
192.168.16.0 0.0.0.0 255.255.255.0 U 101 0 0 ens37
#新添加一条路由条目
[root@vpn1 ~]# route add -net 192.168.17.0/24 gw 10.200.0.2 #思考:为啥网关指定10.200.0.1,为什么不可以指定192.168.9.2?
192.168.17.0 10.200.0.1 255.255.255.0 UG 0 0 0 tun0
以上配置后,就可以client2就可以ping通VPN1的TUN了
那以此类推,想要client1ping通VPN2的TUN,也是在VPN2添加一条路由规则即可:
[root@vpn2 ~]# route add -net 192.168.16.0/24 gw 10.200.0.1
6、经过以上配置之后,client1(192.168.16.10)就可以和client2(192.168.17.10)互通了。
7、扩展:以上添加路由是我们自己手动添加的,那可不可以在启动OpenVPN时就自动添加路由规则呢?
是可以的。我们在配置文件中添写即可:
route 192.168.16.0 255.255.255.0
route 192.168.17.0 255.255.255.0
192.168.17.0 10.200.0.2 255.255.255.0 UG 0 0 0 tun0
192.168.16.0 10.200.0.1 255.255.255.0 UG 0 0 0 tun0
通过日志分析自动添加路由的过程:
/sbin/ip route add 192.168.17.0/24 via 10.200.0.2
6、选型:route network/IP [netmask] [gateway] [metric]
功能:在建立连接之后添加路由项,可以指定多个路由项
在TUN/TAP设备关闭之前,将会以逆序的方式自动删除这些添加的路由项
netmask默认值:255.255.255.255
gateway默认值:route-gateway的值或者是ifconfig的第二个参数,这也就是我们使用route选项时,不需要指定gw,就有默认的gw。
metric默认值:route-metric的值或0
network和gateway还支持以下关键字:
vpn_gateway:表示远程VPN节点地址
net_gateway:表示预先存在的默认网关地址
remote_host:如果OpenVPN是运行在客户端模式下,并且没有定义Server模式,表示remote地址
7、选项:route-delay [n] [w](路由延迟)
功能:指定在建立完成之后,添加路由之前的延迟时间
[n]:如果是0,表示在完成连接之后立即添加路由,如果省略选项,那么在启用TUN/TAP设备--UP脚本被执行之后且在降级权限之前添加路由
[w]:在Windows上,通过在添加路由之前等待w秒,默认值w=30
三个站点互联
1、三个OpenVPN隧道是两两相连,那监听的端口就需要不一样,A---B:1194,A---C:1195
- 1.5w
-
JavaScript
TypeScript
- 12.8w
-
superZidan
JavaScript
掘金·日新计划
- 4.8w
-
emo_png