无公网IP如何异地组网,纯白嫖玩法介绍

2022-01-12 19:22:40 14点赞 184收藏 17评论


一、由于追加修改不能排版,另起一篇记录了。

二、保险起见,利用秒开软路由的内网穿透功能,在PVE机pgyvpn不正常的时候远程通过ssh登陆进行维护。步骤1:系统——>登陆管理——>云登陆,记住登陆URL地址(可以更改为便于记忆的云登陆标识)https://标识.morequick.cn:84; 步骤2:工具——>实用工具——>内网云穿透,填上目标:192.168.15.6,用户名:root,选择SSH连接,即可进行远程维护。可以输入pgyvpn命令登陆,操作重启PVE等等。

①发的急了点,PVE守护脚本顺序有点问题,以这个为准: 将脚本一分为二,分别定时检测。脚本1:check_gpyvpn.sh内容如下 #!/bin/bash #检测pgyvpn服务是否开启 if [ $(ping -c 1 -W 1 172.16.1.189 | grep time | grep -v grep | wc -l) -eq 1 ];then echo "PGYVPN network off" #蒲公英VPN网络不通 /etc/init.d/pgyvpn start & #启动 pgyvpn else echo "PGYVPN network on" fi exit 0 脚本2:check_route.sh内容如下 #!/bin/bash #检测群晖内网链接畅通性 if [ $(ping -c 1 -W 1 192.168.100.218 | grep time | grep -v grep | wc -l) -eq 1 ];then echo "DSM network unreachable" #至群晖的静态路由未启动 route add -net 192.168.100.0 netmask 255.255.255.0 gw 172.16.1.78 #启动至群晖的静态路由表 else echo "DSM network smooth" fi ②另外,3.6节群晖计划任务最后运行时间有误,我设置了群晖7:50开机24:00关机,所以最后运行时间应该改为23:50。 ③保险起见,利用秒开软路由的内网穿透功能,在PVE机pgyvpn不正常的时候远程通过ssh登陆进行维护。步骤1:系统——>登陆管理——>云登陆,记住登陆URL地址(可以更改为便于记忆的云登陆标识)https://标识.morequick.cn:84; 步骤2:工具——>实用工具——>内网云穿透,填上目标:192.168.15.6,用户名:root,选择SSH连接,即可进行远程维护。可以输入pgyvpn命令登陆,操作重启PVE等等。

一、折腾理由

理由很简单,马上春节了,准备回老家过年,两处家庭网络都拉的移动宽带没得公网IP,原先是利用公司的电信网络采用爱快进行了异地组网,具体可见“电脑数码 篇四:利用爱快软路由异地组网,实现内网穿透和远程办公”(传送门)。

无奈最近公司经营形势不乐观,随时都有可能“执笠”,因此就想着鼓捣鼓捣下如何使两个无公网IP的局域网能够异地组网。当然,本着捡垃圾的精神,那些需要掏钱购买硬件或服务的方案我是通通不予考虑的,这个玩法全部利用手头上的设备,额外花费就是把本来吃灰的设备插上电源,多花了那么一丁点电费吧。

二、系统需求

有了想法以后,我就着手寻找组网的方案,一开始准备部署Zerotier,当搜索有关资料时,遇见了B站韩风大佬的作品“中国版的Zerotier:蒲公英进阶玩法,想不想白嫖,全在你!”(传送门),眼前一亮,真是“踏破铁鞋无寻处,得来全不费功夫”。

视频中介绍的硬件(主要是树莓派)我并没有,如果刚好你的系统设备与其相合,直接抄作业就是了。我想我的intel小主机安装的PVE属于Debian系统,也许能行。

提到intel小主机,吃灰有一段时间了,本来准备在某鱼出掉的,无奈跌价厉害而下架。PVE主机的配置及安装过程另见“电脑数码 篇二:intel小主机安装PVE+Kodi(18.6)+OpenWrt,实现HTPC+旁路由功能”(传送门),目前PVE系统已升级到7.1.8,并且参考B站Vedio Talk 大佬的“PVE虚拟机安装KDE Plasma桌面,完美替代win11直出all in one方案”(传送门),升级后直接安装的Kodi版本已经是19.1了,可以在KDE桌面上打开Kodi,也可以设置开机直接进入Kodi,简直方便到家了无公网IP如何异地组网,纯白嫖玩法介绍

除了PVE主机,还有家里的爱快主路由和蜗牛星际J1900装的黑裙,版本是DS918Plus 6.2.3版。 爱快软路由主要是做静态路由表用的,如果没有条件操作主路由,也可以群晖虚拟机安装其他软路由作旁路,参考后面提到的PVE虚拟机安装旁路由设置。

三、组网过程

组网的思路很简单,第一步就是PVE和群晖主机分别安装蒲公英客户端,具体安装方法可参考蒲公英官网教程,这里有个小坑,就是蒲公英官网的docker程序不太稳定,后来我还是采用韩风大佬推荐的docker程序。

3.1 PVE主机安装pgyvpn

PVE的是Debian系统,选择适用Ubuntu系统的安装程序

选择合适的蒲公英程序选择合适的蒲公英程序

到PVE节点Shell中粘贴刚才从蒲公英官网复制的内容,下载蒲公英客户端到PVE主机

PVE中下载安装程序PVE中下载安装程序

输入以下命令安装pgyvpn:

  • dpkg -i PgyVisitor_Ubuntu_2.3.0_x86_64.deb

等待安装完成

输入:pgyvpn 启动蒲公英客户端,按提示输入你在官网注册的用户名和密码,登陆成功后,可退出访问端界面。

输入:ip addr 查看PVE的IP和所在的网卡名称,我的主路由IP为192.168.15.1,所以PVE的IP我设置为192.168.15.6,所属网卡名称为 vmbr0;蒲公英分配的IP是 172.16.2.177,网卡名 oray_vnc

记下PVE和虚拟网卡的名称和IP地址记下PVE和虚拟网卡的名称和IP地址

PVE端的安装暂告一段落,下面回到家里把群晖的蒲公英客户端安装一下

3.2 群晖安装pgyvpn

putty打开群晖,切换到root用户

(1)查看并安装虚拟网卡驱动

“在使用蒲公英访问端之前需要确保NAS已经安装虚拟网卡驱动, 我们可以通过命令:lsmod |grep tun 来检查当前是否已经安装了虚拟网卡驱动, 若没有安装的话可以通过命令:sudo -i insmod /lib/modules/tun.ko进行安装。”

  • sudo -i

  • lsmod |grep tun

  • tun 19295 3 vhost_net

  • ip6_udp_tunnel 1903 1 vxlan

  • udp_tunnel 2355 1 vxlan

  • tunnel4 2261 1 sit

  • ip_tunnel 13200 1 sit

登陆root帐户需要输入密码,当出现有 “tun 19295 ” 字样说明已安装了虚拟网卡驱动,如果没有安装输入以下命令

  • insmod /lib/modules/tun.ko

可以输入以下命令把驱动写进启动项里

  • cat > /usr/local/etc/rc.d/tun.sh <<EOF

  • #!/bin/sh -e

  • insmod /lib/modules/tun.ko

  • EOF

  • chmod a+x /usr/local/etc/rc.d/tun.sh

好了,驱动打上后安装 pgyvpn docker

(2)下载蒲公英访问端映像

在【注册表】的搜索栏中检索“pgyvpn”,下载“benzbrake/pgyvpn”映像;

不是官方的要好用些不是官方的要好用些

(3)创建并启动容器

采用命令行方式

  • 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

上面“用户名”和“密码”填入你在蒲公英官网注册的。

回到群晖,可以看到pgyvpn容器已经在运行了

pgyvpn正常运行pgyvpn正常运行

至此,NAS设备上通过Docker容器使用蒲公英访问端的介绍已结束。别忘了命令 IP addr 查看下网卡名称和IP,我的分别是 ovs_eth0(IP:192.168.100.218)和oray_vnc(IP:172.16.1.189)

3.3 互访iptables规则和静态路由设置

(声明一下:此部分内容为抄韩风阿婆主的作业,本人小白一个,知其然而不知其所以然,也不求甚解)

(1)PVE端操作

  • 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

  • route add -net 192.168.100.0 netmask 255.255.255.0 gw 172.16.1.189

  • iptables -I FORWARD -i vmbr0 -j ACCEPT

  • iptables -I FORWARD -o vmbr0 -j ACCEPT

  • iptables -t nat -I POSTROUTING -o vmbr0 -j MASQUERADE

备注:192.168.100.0——为对端群晖物理网卡IP所在局域网的网段

172.16.1.189——系蒲公英VPN为对端群晖分配的IP。(下同)

纳尼?返回错误提示!我可是照抄作业呢,掉坑里了啊无公网IP如何异地组网,纯白嫖玩法介绍

我又在shell里route了几次,一直route不通,啊哈,想阻挡我,没那么容易,一顿操作猛如虎,轻松敲掉绊脚石。

原来是PVE没有route命令,要先安装net-tools,否则route命令无效,安装命令:

  • apt-get update

  • apt-get install net-tools

按部就班完成net-tools的安装,之后就可以使用 route 命令设置静态路由了

(2)群晖端操作

  • 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

  • route add -net 192.168.15.0 netmask 255.255.255.0 gw 172.16.2.177

  • iptables -I FORWARD -i ovs_eth0 -j ACCEPT

  • iptables -I FORWARD -o ovs_eth0 -j ACCEPT

  • iptables -t nat -I POSTROUTING -o ovs_eth0 -j MASQUERADE

备注:192.168.15.0——为对端PVE物理网卡IP所在局域网的网段

172.16.2.177——系蒲公英VPN为对端PVE分配的IP。(下同)

(3)PVE机保存iptables规则

输入命令:

  • iptables-save > /etc/iptables

  • cat > /etc/network/if-pre-up.d/iptables <<EOF

  • #!/bin/sh

  • /sbin/iptables-restore < /etc/iptables

  • EOF

  • chmod +x /etc/network/if-pre-up.d/iptables

  • cat > /root/tianluyou.sh <<EOF

  • #!/bin/sh

  • route add -net 192.168.100.0 netmask 255.255.255.0 gw 172.16.1.189

  • EOF

  • chmod +x /root/tianluyou.sh

(4)群晖保存iptables规则

韩UP主说“群晖保存规则没有找到比较好的方法”,但我在使用过程也没发现什么问题,还是及时关注阿婆主的更新吧。

  • cat > /root/tianluyou.sh <<EOF

  • #!/bin/sh

  • 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

  • route add -net 192.168.15.0 netmask 255.255.255.0 gw 172.16.2.177

  • iptables -I FORWARD -i ovs_eth0 -j ACCEPT

  • iptables -I FORWARD -o ovs_eth0 -j ACCEPT

  • iptables -t nat -I POSTROUTING -o ovs_eth0 -j MASQUERADE

  • EOF

  • chmod +x /root/tianluyou.sh

至此,作业抄完。可能许多步骤是不必要的,期待各位老师批改。大侠勿喷

3.4 PVE虚拟机安装“秒开软路由”(相当于买了个蒲公英G5路由器

或许有其他更好的玩法,但是我试了下秒开,感觉功能又多又实用,下一步也有许会用它来替代爱快呢。

(1)首先到秒开官网下载ISO光盘镜像

下载地址:(传送门

将下载得到的ISO文件MQ-UGateway_V1.2_Build20200422.iso 上传到 pve

下载并上传iRouter安装程序下载并上传iRouter安装程序

(2)创建秒开软路由虚拟机

创建秒开软路由虚拟机创建秒开软路由虚拟机

虚拟机的设置可以参考上图我提供的,虚拟网卡给一个就行,先选项里设置光盘第一启动,安装完成后切换为硬盘第一启动,可以把光驱卸掉。

(3)设置秒开软路由

先设置为旁路由模式,网络——>LAN(局域网)——>IP地址:192.168.15.254(为iRouter IP地址,可在PVE虚拟机的控制台设置)——>网关:192.168.15.6(为PVE主机IP)——>此线路的网关作为默认路由选项打开

iRouter旁路由设置iRouter旁路由设置

再添加两条静态路由,路由——>静态路由——>启用——>新增规则(1为映射到对端群晖的虚拟IP,2为映射到群晖所在内网IP网段)

iRouter静态路由设置iRouter静态路由设置

当然,如果你是熟悉openwrt或高恪或梅林系统等等,设置方法大同小异,我是觉得秒开功能丰富设置简单,值得一试。

3.5 PVE机添加定时检测脚本,守护pgyvpn进程

其实我并不懂编程,在网上找了几篇帖子,胡拼乱凑搞出来的。参考的帖子有:断网时,pve自动重启指定虚拟机的脚本(传送门)、求教,有没有PVE虚拟机的脚本,可以实现当网络中断时,能自动重启PVE(传送门)、蒲公英私网VPN脚本(传送门)。

我的脚本如下:

  • #!/bin/bash

  • #检测群晖内网链接畅通性

  • if [ $(ping -c 1 -W 1 192.168.100.218 | grep time | grep -v "grep" | wc -l) -eq 1 ];then

  • echo "DSM network unreachable"

  • #至群晖的静态路由未启动

  • route add -net 192.168.100.0 netmask 255.255.255.0 gw 172.16.1.189

  • #启动至群晖的静态路由表

  • else

  • if [ $(ping -c 1 -W 1 172.16.1.189 | grep time | grep -v "grep" | wc -l) -eq 1 ];then

  • echo "PGYVPN network off"

  • #蒲公英VPN网络不通

  • /etc/init.d/pgyvpn start &

  • #启动 pgyvpn

  • else

  • echo "PGYVPN network on"

  • fi

  • echo "DSM network smooth"

  • fi

  • exit 0

使用WinSCP在PVE机的 /usr/local/目录下新建pgyvpn子目录,再新建check_pgyvpn.sh 脚本文件,把我提供的脚本内容复制粘贴进去,注意IP地址改为你自己机器的。

添加pgyvpn网络及静态路由检测脚本添加pgyvpn网络及静态路由检测脚本

接着打开 /etc/crontab 文件,将以下这条命令添加进去

  • * * * * * root sh /usr/local/pgyvpn/check_pgyvpn.sh >> /usr/local/pgyvpn/pgyvpn.log

无公网IP如何异地组网,纯白嫖玩法介绍

默认是1分钟检测一次,如果觉得太过频繁,可以在第1个*后加上/间隔数,如*/5表示每5分钟检测一次;

从>>起至后面的内容是把结果写入记录文件,如果不需要可以删掉。

修改完后输入:/ect/init.d/cron restart 更新一下

3.6 群晖添加计划任务定时启动pgyvpn

群晖上的守护程序不想折腾,直接在群晖上计划任务里添加脚本(已在3.3节用命令行生成)

设定每15分钟运行一次设定每15分钟运行一次

脚本文件已经在前面生成脚本文件已经在前面生成

3.7 群晖所在网络主路由添加静态路由

我的是爱快软路由,添加静态路由如下,使得所在网络能够访问对端PVE机及其所在网络

无公网IP如何异地组网,纯白嫖玩法介绍

如果是openwrt作主路由,可以用命令行:

  • route add -net PVE的pgy虚拟IP netmask 255.255.255.255 gw 群晖IP

  • route add -net PVE所在网段IP netmask 255.255.255.0 gw 群晖IP

这里我遇到一个难题,我的台式机无法PING通对端PVE所在网段IP,换台笔记本电脑就可以,原因未明。

3.8 测试两端局网内电脑互PING

设置完成后我在两端的路由上互相ping一下,均能ping通,说明已经组网成功。

但是用电脑端在PVE局网进行ping群晖所在局网,却死活不通。这才想起原来虽然设置了旁路由,但并没在将主路由的网关指向旁路由,所以不通。于是我对电脑的IP地址手动指定网关为PVE主机,即ping即通!

无公网IP如何异地组网,纯白嫖玩法介绍

我也不打算修改主路由设置了,这样只是把需要连通的设备设置一下旁路由网关,更加安全可靠。

四、总结

(本节有待试用一段时间后补充)

这个玩法也可以变通一下组合,比如PVE对PVE,群晖对群晖,各种方案自行选择。

另外,秒开软路由还有远程登陆通道、远程打开内部客户端、异常通知报警等功能,有待进一步摸索。

还有PVE机的pgyvpn好像不太稳定,偶尔ping不通。因此,我在crontab文件里又添加了定时重启脚本了。



作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
17评论

  • 精彩
  • 最新
  • 移动不是有IPV6吗?

    校验提示文案

    提交
    以前是用的IPV6,然后阿里云动态域名,我是喜新厌旧兼爱好瞎折腾,所以又胡搞一通

    校验提示文案

    提交
    收起所有回复
  • IPv6更方便吧,直接用

    校验提示文案

    提交
    IPV6是动态地址,以前我买了个阿里云域名进行解析,折腾这个是不想再买域名。也许可以利用iRouter的内网云穿透,更加简捷。

    校验提示文案

    提交
    收起所有回复
  • 两地使用蒲公英的传输速度是多少?

    校验提示文案

    提交

    gunpen

    作者

    108s

    还没测试,蒲公英转发是1M带宽吧,我主要是用于远程监控和维护的,对速度要求不高。

    校验提示文案

    提交
    没测过速度。。我是联通宽带。。反正异地拿手机用ds file开个电影还挺流畅的,拖拽也挺快。。但不是4k高清啊圆盘那种。。就是普通迅雷下载的那种。。

    校验提示文案

    提交
    收起所有回复
  • 可以装openwrt然后 nat不 [观察]

    校验提示文案

    提交
    我原来也想这么弄,但不会搞没搞通。现在的脚本还是有问题,保存规则那个脚本应该是设置随开机启动,检测pgyvpn和route的脚本设置定时检测。群晖也可以通过脚本重启docke达到登陆pgyvpn的效果,PVE也可以装docke,在r容器下安装pgyvpn等等,方案还在摸索中,现在还不是很稳定,有时候明明连接VPN,Ping却回答请求超时,pgyvpn也找不到重启的命令(所以有想通过docker安装pgyvpn的想法)。

    校验提示文案

    提交
    我现在用zerotier了 只要光猫设置好了 直接就是最大上行带宽

    校验提示文案

    提交
    收起所有回复
  • 现在网络环境大多限制了虚拟局域网。
    无公网IP内网穿透和异地远程办公,常规是做内网IP端口映射到互联网,如FRP或nat123映射外网访问。

    校验提示文案

    提交
    最近已抛弃蒲公英,在用决明子,还有钉钉,实测都能达到3~5Mb/S的速度,看老家的组播电视也没压力。另外还准备折腾IPv6路由openwrt映射内网的IPv4设备(主要是秒开IPTV),异地通过IPv6收看电视。

    校验提示文案

    提交
    写篇教程啊,大佬

    校验提示文案

    提交
    收起所有回复
  • gunpen

    作者
    实测下来,感觉蒲公英网络还是不太稳定,我又在爱快里面虚拟机加了个秒开软路由当旁路由用,然后利用实用工具——内网云穿透功能,简单快捷!

    校验提示文案

    提交
  • ddnsto挺好用

    校验提示文案

    提交
    DDNS动态域名解析方案的使用前提就是需要本地路由有公网IP,不适合无公网IP环境。内网IP端口映射外网类似有FRP和nat123等方式。

    校验提示文案

    提交
    他说的是ddnsto不是ddnsgo。ddnsto是可以在无公网ip下进行内网穿透的。

    校验提示文案

    提交
    收起所有回复
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
184
扫一下,分享更方便,购买更轻松