OpenVPN网络与路由设置

教程大全  / 只看大图  / 倒序浏览   ©

#楼主# 2020-2-15

跳转到指定楼层

马上注册,分享更多源码,享用更多功能,让你轻松玩转云大陆。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

前言

阅读本文,发起你有相关Linux/Windows或CCNA的网络基础,本文着重解说路由技术,会涵盖Linux的iptable/route命令和Windows的route命令。

本教程的内容是在OpenVPN软件不是本地网络的默认网关(即,将OpenVPN安装在某些盘算机/服务器而不是路由器上)时,提供有关访问OpenVPN的LAN资源的一些提示。


125515ic1mvzmxvtamuma2.png

每台盘算机将数据包发送到某个地址时都需要知道将数据发送到哪里。在现代系统中,这是通过具有路由表来完成的,此中每行都指示将特定数据包发送到的位置。路由线路包括目标网络,用于分隔网络位的网络掩码,网关(即将处理数据包的远程ip)以及将通过其发送数据包的接口名称(或IP)。路由表中有默认路由,该路由指示将目的地为自身接口,环回目的地,本地lan盘算机的数据包发送到何处,以及不符合其他条件的默认路由。默认路由界说为零,即网络0.0.0.0和网络掩码0.0.0.0,而且作为网关IP,它具有某些本地路由器的IP或ISP的网关的IP。该规则被命名为常规或默认路由。如果盘算机需要发送未由更特定的规则指定的数据包,则将其发送到默认规则中指定的默认GW。

通常,当新的OpenVPN用户开始参加远程站点时,它们会乐成安装OpenVPN并配置防火墙和iptable规则,但在访问远程资源时仍然存在问题。

假设我们在局域网中的其他盘算机上设置了OpenVPN。 如上图中的公司局域网的主机192.168.50.10不知道VPN网关的IP 10.8.0.1和远程站点A的LAN的IP 10.8.0.2,即主机中的路由表中没有他们的任何条目,路由表将指定将这些网络的数据包发送到何处呢?如下图所示为192.168.50.10主机的路由表

125516d1739sesycr58ecx.png

没错,主机192.168.50.10会将他认为不知道的任何目标网络的数据包发送到LAN的默认网关192.168.50.254,但该192.168.50.254的网关(在网络中默认情况下)将丢弃这些数据包,因为网关也不知道如何处理此类目标数据包。 这是写本文的提出的问题,在本教程中,我们将使用这种配置:

站点A
网络: 10.8.0.0/24
vpn网关: 10.8.0.1
运行OpenVPN的主机的IP 10.8.0.2由vpn网关的dhcp分配

站点B
网络:192.168.50.0/24。
默认网关的IP:192.168.50.254(站点B中全部主机默认网关)
备份网关的IP:192.168.50.253 (是一台运行iptable+openvpn的防火墙,也充当vpn网关的职能)

VPN IP来自10.8.0.0/255.255.255.0,这是openvpn默认配置的。

在讨论这个问题时,哪个站点是服务器或客户端以及哪些IP获取TAP接口并不重要。 要管理此路由问题,有四种方法:

方案1:默认网关搭载OpenVPN服务

很明显,将OpenVPN软件移至局域网的默认网关。 由于在某些情况下这是不大概的(无法运行OpenVPN的简单路由器),因此方法是将来扩展的最佳方法,因为添加更多远程站点不会涉及路由问题。

方案2:为远程站点的内网主机添加路由条目

将远程网络的站点B的静态路由添加到站点A中被访问主机的路由表。在每台主机上,我们必须添加如下路由:

Windows的路由配置
如果你站点A中存在Windows的主机

[	DISCUZ_CODE_0	]

例如,我们在站点A的主机192.168.50.10,添加相关的openvpn网段路由,不外再次之前,你需要知道该路由条目使用主机接入局域网用到哪一个网卡接口,
起首,我们可以使用ipconfig命令查看网卡的名称,我这里是“本地连接5”

125516wodk553odd35b6ub.png

然后,我们需要查找对应的网卡接口的号码,这里需要用到netsh interface ipv4 show interface这条命令
125517lxdq5zdfcg650xx6.png

这里,我们知道接口号是18,这个号码是主机的路由条目需要用到的,那么我们可以配置192.168.50.10主机的通向站点B网络10.8.0.0/24

[	DISCUZ_CODE_1	]

现在可以通过route print命令来查看192.168.50.10主机的路由表

125517t9k9uqkz9noduzrz.png

我们可以使用执行路由跟踪看看我们的路由配置是否正确
125518kjz66k55pk6ea0k5.png

但这种方法唯一的缺点,该主机重启后刚才配置的路由条目会消息,因为它不是一条静态路由,配置静态路由很简单,就是在刚才的路由条目的配置指令后添加命令参数"-p"即可,再次查看路由表,你会发现底部多了一条静态路由
125518pbn0dedvjmcl8cda.png

Linux路由配置
如果是站点B的存在Linux主机,使用如下格式

[	DISCUZ_CODE_2	]

例如,在站点A的Linux主机,我们可以添加

[	DISCUZ_CODE_3	]

在Linux中我们可以通过route -n指令可以产看Linux主机下的路由表,值得一说的是,Linux的路由配置一直都是利索干净,没像Windows那样那么多余动作。

125519obrxjbxgzgxzq5zw.png

我们知道Linux路由表当中多了一条通向10.8.0.0的路由,意思就是告知Linux内核,全部IP数据包的目标地址符合网络号10.8.0.0/24的丢到网关192.168.50.253,而数据出口就是eno1,脱离了主机的数据包,再由网关192.168.50.253,根据它的路由表再次转发到站点A的主机10.8.0.2,Window主机的路由配置同理。如下图所示
125520vb4l4p4ob7488amt.png

方法3:在默认网关上配置路由重定向

此方法意味着仅在LAN的默认网关上添加与方法2中雷同的路由。 因此重定向将由路由器负责,我们不需要在每台主机上添加路由。

为什么我这里没有这VPN服务集成到默认网关呢?究竟上,Juniper也可以或许配置vpn啊,但我们想将多种关联的服务集成一台设备,例如邮件过滤/代理转发/SSH穿透等集成在一台Linux防火墙上,我的管理理念就是相关的应用服务都集中在一台服务器上,这样便于集中管理。而独立硬件防火墙就让他负责网络安全防御和简单的路由互换。

OK,Juniper的路由条目配置,其实也是一目了然的,见下图,记得选择trust-vr到trust-vr,然后选择New,这样就告诉Juniper防火墙,这个目标路由仅仅是内网的重定向,也就是从192.168.50.254到192.168.50.253网关的流量重定向

125520uc87xk8tsg6ggktt.png

然后按照如下图填写站点A的10.8.0.0/24的网络和下一跳网关192.168.50.253

125521i9zqz0c8q221yjy1.png

我们查看一下Juniper的路由表,OK没问题

125521j93vzr4prpirilx5.png

我们删除上面配置过的站点A主机192.168.50.10的路由条目,很简单,使用route delete 10.8.0.0命令即可,此时我们再次路由跟踪查看默认网关的路由重定向是否生效?

125521vg4qg3ygyh4qlxg4.png

结果,发现一切都是正常的,下图就是从站点B的主机到站点A主机的路由重定向的数据包流向。
125522p9t7mwd277iwj703.png

当然,如果路由器允许修改路由表和iptable,这是大概的。
与方法2一样,在默认路由器上,我们将路由添加到远程站点:

[	DISCUZ_CODE_4	]

例如,在IP地址为192.168.0.1的站点A的默认网关上,我们必须添加两条路由:

[	DISCUZ_CODE_5	]

但这只会显示网关将其自身发送的数据包发送到何处。 我们还需要显示如何从本地主机路由到远程站点的数据包。 为此,我们必须向路由器iptable添加一条规则,该规则将告诉全部从LAN接口传入并具有远程站点网络目的地的数据包都必须重定向到OpenVPN主机。 大多数处理更广泛定制的路由器都可以使用unix之类的命令“ iptables”。 因此,我们使用iptables规则,如下所示:

[	DISCUZ_CODE_6	]

例如,在站点A的默认路由器上,我们将添加:

[	DISCUZ_CODE_7	]

我们以雷同的方式在站点B的默认路由器上添加规则。

如果添加第三个站点,则必须以雷同的方式向其他站点添加到第三个站点网络的路由。

[	DISCUZ_CODE_8	]
分享淘帖
回复

使用道具

您的回复是对作者最大的奖励

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于作者

8194cbb302ee

新手猿

  • 主题

    7

  • 帖子

    7

  • 关注者

    0

Archiver|手机版|小黑屋|云大陆 | 赣ICP备18008958号-4|网站地图
Powered by vrarz.com!  © 2019-2020版权所有云大陆