• 异地局域网对接:异地组网原理与实操


    无论是在工作还是学习过程中,我们经常会有异地访问局域网的需求。所谓异地组网,就是要打通两地的局域网络环境,在任何一地的局域网络环境下,能够通过输入异地局域网地址的方式,实现类似于本地局域网访问的效果。本文将详解异地局域网对接的原理,并予以实操。


    任务目标:

    1. 建立稳定隧道
    2. 通过隧道打通两端局域网

    异地局域网对接原理:

    1. 跨公网搭建一条加密隧道,使两端局域网互通。
    2. 由于跨公网的隧道是加密的,因此隧道的安全性能够得到保障。

    ssh隧道的建立依赖于一端的公网ip,为便于展示与理解,在实操部分,文章将直接使用蒲公英的隧道穿透方案,这套方案可以在NAS服务器、路由器、各种操作系统上落地。免费版本虽然只支持3个设备,但是我们可以通过在网关或者旁路由上搭建隧道,做到只用两个成员,却完全实现两个异地局域网之间的互通。下文将以在异地的两个旁路由上搭建隧道为例,展开论述。


    一、网络环境介绍

    请添加图片描述
    如图所示:

    • 家庭A局域网段为192.168.8.0/24,网关(192.168.8.1/24)通过光猫(192.168.2.1)接入中国电信主干网。在家庭A的局域网环境下,有一台NAS服务器(192.168.8.20),作为家庭A的蒲公英组网方案的客户端;
    • 家庭B局域网段为192.168.1.0/24,网关(192.168.1.1/24)通过长城宽带接入公网,在家庭B的局域网环境下,有一个闲置蒲公英x1盒子(192.168.1.10),作为家庭B的蒲公英组网方案的客户端。当然,也可以用一个软路由实现彻底的零付费使用蒲公英组网方案。

    二、打通远程局域网

    1. 在两个局域网间建立隧道客户端

    隧道的两端,分别为家庭A的NAS服务器和家庭B的蒲公英盒子(本质上就是两个旁路由)。

    在这里插入图片描述

    直接在NAS服务器的docker中安装 ‘benzbrake/pgyvpn’ ,各大操作系统的部署方法可以 见此视频

    Docker run-d\ 
    --restart=always\ 
    --device=/dev/net/tun\ 
    --net=host\
    --cap-add=NET ADMIN\ 
    --cap-add=SYS ADMIN\
    --env PGY USERNAME=蒲公英用户名\ 
    --env PGY PASSWORD=浦公英密码\ 
    --name pgyvpn
    
    benzbrake/pgyvpn
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在部署完成后,我们可以分别查看下NAS服务器蒲公英盒子的网卡和ip地址信息,可以看到隧道的虚拟网卡和地址都已经分配好了。

    在本次示例中,NAS服务器和蒲公英盒子的信息如下:

    • NAS——ORAY VNC:172.16.3.228/32 ;子网掩码:255.255.255.255
    • 蒲公英盒子——ORAY VNC:172.16.3.121/32 ;子网掩码:255.255.255.255

    子网掩码都是255.255.255.255,说明是点对点隧道。

    2. 建立路由表

    要完成两个局域网间设备的互访,还需要两边局域网内的设备的网关设置为各自的局域网旁路网关,或者直接在主路由上设置静态路由表。我们以家庭A中一个设备PC1为起点,逐步疏通线路。

    请添加图片描述

    (1)在家庭A的默认网关上配置静态路由:找到去家庭B的隧道

    当家庭A网段(192.158.8.0/24)中任何一个设备要访问家庭B网段(192.168.1.0/24)内的设备,以及家庭B端的局域网隧道端口——即蒲公英盒子(172.16.3.121/32),都需要经过NAS服务器(192.168.8.20)上的隧道出去,那么首先就要让家庭A中的任何一个设备在想要访问家庭B时,能够找到家庭A中的NAS服务器这个‘大门’。因此需要配置家庭A中的默认网关(192.168.8.1/24)的路由表,将所有请求家庭B网段(192.168.1.0/24)的地址以及家庭B端的局域网隧道端口(172.16.3.121/32),指向本地的NAS服务器(192.168.8.20)。

    可视化界面处理:

    在这里插入图片描述
    或者命令行处理:

    route add -net 192.168.1.0/24 gw 192.168.8.20
    route add -net 192.168.1.0/24 gw 172.16.3.121/32
    
    • 1
    • 2

    192.168.8.1

    192.168.1.0/24—>192.168.8.20
    192.168.1.0/24—>172.16.3.121/32

    (2)在家庭A中的NAS服务器上配置静态路由:绑定家庭B隧道和局域网网段

    当家庭A中任何一个设备要访问家庭B内的设备,都需要经过NAS服务器上的隧道,因此只需要在NAS服务器上添加一个静态路由,将目的地址为192.168.1.0/24【家庭B局域网网段】的数据包,转发到本地局域网隧道端口172.16.3.121/32【家庭B蒲公英盒子的ORAY VNC】

    route add -net 192.168.1.0/24 gw 172.16.3.121/32
    
    • 1
    echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf
    sysctl -p
    iptables -I FORWARD -i oray_vnc -j ACCEPT
    iptables -I FORWARD -o oray_vnc -j ACCEPT
    iptables -t nat -I POSTROUTING -o oray_vnc -j MASQUERADE
    
    iptables -I FORWARD -i eth0 -j ACCEPT
    iptables -I FORWARD -o eth0 -j ACCEPT
    iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
    
    iptables -I FORWARD -i docker0 -j ACCEPT
    iptables -I FORWARD -o docker0 -j ACCEPT
    iptables -t nat -I POSTROUTING -o docker0 -j MASQUERADE
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    192.168.8.20

    192.168.1.0/24—>172.16.3.121/32

    此时,用A家庭的NAS服务器去ping家庭B的蒲公英盒子是可以通的,但是去ping家庭B的其他设备不通,原因是家庭B其他设备在返回数据包时,家庭B其他设备没有办法在本地网关以及默认网关(192.168.1.1/24)的路由表中查询到隧道地址。

    在这里插入图片描述

    (3)在家庭B的默认网关上配置静态路由:找到回家庭A的隧道,完善家庭B局域网回路

    家庭A发至家庭B的数据包既有可能是家庭A的局域网网段地址(192.168.8.0/24),也有可能是家庭A的隧道地址(172.16.3.228)。因此需要在家庭B的局域网的网关中添加两条静态路由:将来自家庭B的数据包,转发给旁路由——此处为蒲公英盒子(192.168.1.10)。
    在这里插入图片描述

    192.168.1.1

    192.168.8.0/24—>192.168.1.10
    172.16.3.228—>192.168.1.10

    在这里插入图片描述

    此时,家庭A中的NAS服务器去ping家庭B中的任何一个局域网内设备都是通畅的了。

    在这里插入图片描述
    但是此时会发现,家庭A中的局域网设备,是ping不通家庭B中的设备的。这是因为家庭B中返回的数据包,转发到旁路由,即蒲公英盒子(192.168.1.10),蒲公英盒子缺少到家庭A局域网网段(192.168.8.0/24)的路由,只有家庭A中NAS服务器的路由,因此只有家庭A中的NAS服务器可以ping通。

    (4)在家庭B中的旁路由(蒲公英盒子)上配置静态路由:绑定家庭A隧道和局域网网段

    此时需要在家庭B中的旁路由(蒲公英盒子)上添加一条返回家庭A局域网的静态路由。

    route add -net 192.168.8.0/24 gw 172.16.3.228
    
    • 1
    # echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf
    # sysctl -p
    iptables -I FORWARD -i oray_vnc -j ACCEPT
    iptables -I FORWARD -o oray_vnc -j ACCEPT
    iptables -t nat -I POSTROUTING -o oray_vnc -j MASQUERADE
    
    iptables -I FORWARD -i eth0.1 -j ACCEPT
    iptables -I FORWARD -o eth0.1 -j ACCEPT
    iptables -t nat -I POSTROUTING -o eth0.1 -j MASQUERADE
    
    iptables -I FORWARD -i br-lan -j ACCEPT
    iptables -I FORWARD -o br-lan -j ACCEPT
    iptables -t nat -I POSTROUTING -o br-lan -j MASQUERADE
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    192.168.1.10

    192.168.8.0/24—>172.16.3.228

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    此时可以看到,家庭B局域网中的蒲公英盒子网关以及其他接入设备,都可以自由ping通家庭A中的任意设备了。

    至此,我们实现了家庭A和家庭B之间局域网主机的互通。


    三、连通性测试

    1. 家庭A设备

    (1)NAS服务器 ping:
    192.168.1.1【b网关】——成功
    192.168.1.9【b其他设备】——成功

    (2)网关 ping:
    192.168.1.1【b网关】——成功
    192.168.2.1【b盒子】——成功
    192.168.1.9【b其他设备】——成功

    2. 家庭B设备

    (1)盒子 ping:
    192.168.8.20【a客户端,即NAS服务器】——成功
    192.168.8.1【a网关】——成功

    (2)网关 ping:
    192.168.8.20【a客户端】——成功
    192.168.8.1【a网关】——成功

    (3)其他设备 ping:
    192.168.8.20【a客户端】——成功
    192.168.8.1【a网关】——成功

    在这里插入图片描述


    至此,本文也就进入尾声了。希望本文能够起到抛砖引玉之效,也欢迎大家的批评交流。


    如果您有任何疑问或者好的建议,期待你的留言、评论与关注!

  • 相关阅读:
    sftp文件上传uploadFile
    【BIM入门实战】Revit图元的选择方式,总有一款适合你
    基于双碳背景和趋势讲述AcrelEMS企业微电网能效管理系统-Susie 周
    操作系统 | 进程与线程
    关于事务的一点思考
    MG动画完成练习
    Python:实现linear regression线性回归算法(附完整源码)
    MySQL之数据查询(分类汇总与排序)
    基于Python实现Eigenface人脸识别、特征脸识别
    11_C++_《指针》_笔记整理
  • 原文地址:https://blog.csdn.net/deng_xj/article/details/114650865