异地局域网对接:异地组网原理与实操
无论是在工作还是学习过程中,我们经常会有异地访问局域网的需求。所谓异地组网,就是要打通两地的局域网络环境,在任何一地的局域网络环境下,能够通过输入异地局域网地址的方式,实现类似于本地局域网访问的效果。本文将详解异地局域网对接的原理,并予以实操。
任务目标:
- 建立稳定隧道
- 通过隧道打通两端局域网
异地局域网对接原理:
- 跨公网搭建一条加密隧道,使两端局域网互通。
- 由于跨公网的隧道是加密的,因此隧道的安全性能够得到保障。
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 pgyvpnbenzbrake/pgyvpn
在部署完成后,我们可以分别查看下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
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
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 MASQUERADEiptables -I FORWARD -i eth0 -j ACCEPT
iptables -I FORWARD -o eth0 -j ACCEPT
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADEiptables -I FORWARD -i docker0 -j ACCEPT
iptables -I FORWARD -o docker0 -j ACCEPT
iptables -t nat -I POSTROUTING -o docker0 -j MASQUERADE
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.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
# 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 MASQUERADEiptables -I FORWARD -i eth0.1 -j ACCEPT
iptables -I FORWARD -o eth0.1 -j ACCEPT
iptables -t nat -I POSTROUTING -o eth0.1 -j MASQUERADEiptables -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
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网关】——成功
至此,本文也就进入尾声了。希望本文能够起到抛砖引玉之效,也欢迎大家的批评交流。
如果您有任何疑问或者好的建议,期待你的留言、评论与关注!
异地局域网对接:异地组网原理与实操相关推荐
- redis cluster 集群 HA 原理和实操(史上最全、面试必备)
文章很长,建议收藏起来慢慢读!疯狂创客圈总目录 语雀版 | 总目录 码云版| 总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 经典图书:<Java高并发核心编程(卷1)> 面试必备 ...
- 从原理到实操,看当前最佳的YOLO V4是如何炼成的?
YOLO系列的网络都有一个共同的特点,即追求网络精度也追求网络速度,YOLO V4在此基础上又多了一个追求,那就是降低硬件要求. YOLO V4 的开发历程很有意思,其中评估.修改和整合了很多有趣的新 ...
- 1W字长文:蓝绿发布、金丝雀发布、滚动发布、A/B测试 原理和实操
背景: 蓝绿发布.金丝雀发布.滚动发布.A/B测试 ,是大家日常常见的发布工作.所以发布的原理和实操是一个非常.非常核心的面试知识点. 在40岁老架构师 尼恩的读者交流群(50+)中,其相关面试题是一 ...
- 相关性分析原理与实操
在数据分析过程中,通常引入统计学名词"变量"来代替不同的影响因素.在大量的变量关系中,相关关系是非常重要的关系.相关关系是指两个变量或若干变量之间存在的一种非严格的确定性关系.例如 ...
- 【mysql进阶】MTS主从同步原理及实操指南(七)
0.引言 随着业务场景的深入和请求量的剧增,单库实现读写越来越趋近瓶颈,于是我们想到搭建主从库,主库负责写,从库负责读,从而实现读写分离,提高查询效率. 但是主从库之间的数据如何同步呢?很明显我们写入 ...
- 计算机视觉之姿态识别(原理+代码实操)
一.姿态识别整体过程 基于图像视频 基于mems传感器(高性能三维运动姿态测量系统) 二.人体分割 •人体分割使用的方法可以大体分为人体骨骼关键点检测.语义分割等方式实现.这里主要分析与姿态相关的人体 ...
- Jmeter分布式压测介绍、原理及实操(一台master-windows控制机,三台slaves-linux负载机)
前言:大家在使用jmeter压测过程中,可能会度遇到内存溢出的错误,这是为什么呢? 因为jmeter是java写的应用,java应用jvm堆内存heap受负载机硬件限制,虽然我们可以调整堆内存大小,但 ...
- Hive SQL 小表与大表Join 原理与实操
一.案例演示 1)没有使用map join -- a 表是大表,数据量是百万级别 -- b 表是小表,数据量在百级别 select a.field1 as field1,b.field2 as fie ...
- qq浏览器打开word 技术原理_实操:QQ群排名技术原理
想必大家都创建过QQ,但是就是没有排名没人加最后放弃了,不活跃,今天教大家如何弄活一个QQ群,让说话以及加群的人变多. 直奔主题说影响群排名的因素及原理: 第一点:群等级压制 重要程度:★★★★★ Q ...
最新文章
- PHP整理笔记八正则表达式
- Python的locals()函数
- PC-计算机动行命令里的密密!系统管理程序!
- spring-boot注解详解(六)
- Windows Server 2008 系统上c#读取Excel遭遇“用户代码未处理 ComException”错误
- 启动linux的rpc服务的命令
- 智慧交通day02-车流量检测实现07:匈牙利算法
- 移动云正式发布基于龙蜥 Anolis OS 的 BC-Linux V8.2 通用版操作系统
- C#删除字符串最后一个字符的几种方法
- ASP.NET版本不是1.1, 2.0的也一样
- 实现带有拉普拉斯修正的朴素贝叶斯_数据科学 | 算法工程师必备的机器学习贝叶斯分类器...
- 2018WPS暑期实习生web前端笔试题
- 在ArcGIS中创建Python工具或者pyt工具箱
- Cesium中如何获取鼠标单击位置的经纬度
- unity-2D游戏地面检测 三射线检测
- QT入门学习之软件程序开发初体验
- 中国超级计算机使用率,中国天河一号超级计算机已饱和运行 使用率超过欧美...
- iWatch 的text和label
- 各厂内推整理 | 第二期
- 小巧的Lingoes翻译家