无公网IP如何异地组网,纯白嫖玩法介绍
一、由于追加修改不能排版,另起一篇记录了。
二、保险起见,利用秒开软路由的内网穿透功能,在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,简直方便到家了
。
除了PVE主机,还有家里的爱快主路由和蜗牛星际J1900装的黑裙,版本是DS918Plus 6.2.3版。 爱快软路由主要是做静态路由表用的,如果没有条件操作主路由,也可以群晖虚拟机安装其他软路由作旁路,参考后面提到的PVE虚拟机安装旁路由设置。
三、组网过程
组网的思路很简单,第一步就是PVE和群晖主机分别安装蒲公英客户端,具体安装方法可参考蒲公英官网教程,这里有个小坑,就是蒲公英官网的docker程序不太稳定,后来我还是采用韩风大佬推荐的docker程序。
3.1 PVE主机安装pgyvpn
PVE的是Debian系统,选择适用Ubuntu系统的安装程序
到PVE节点Shell中粘贴刚才从蒲公英官网复制的内容,下载蒲公英客户端到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端的安装暂告一段落,下面回到家里把群晖的蒲公英客户端安装一下
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容器已经在运行了
至此,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。(下同)
纳尼?返回错误提示!我可是照抄作业呢,掉坑里了啊
我又在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
(2)创建秒开软路由虚拟机
虚拟机的设置可以参考上图我提供的,虚拟网卡给一个就行,先选项里设置光盘第一启动,安装完成后切换为硬盘第一启动,可以把光驱卸掉。
(3)设置秒开软路由
先设置为旁路由模式,网络——>LAN(局域网)——>IP地址:192.168.15.254(为iRouter IP地址,可在PVE虚拟机的控制台设置)——>网关:192.168.15.6(为PVE主机IP)——>此线路的网关作为默认路由选项打开
再添加两条静态路由,路由——>静态路由——>启用——>新增规则(1为映射到对端群晖的虚拟IP,2为映射到群晖所在内网IP网段)
当然,如果你是熟悉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地址改为你自己机器的。
接着打开 /etc/crontab 文件,将以下这条命令添加进去
* * * * * root sh /usr/local/pgyvpn/check_pgyvpn.sh >> /usr/local/pgyvpn/pgyvpn.log
默认是1分钟检测一次,如果觉得太过频繁,可以在第1个*后加上/间隔数,如*/5表示每5分钟检测一次;
从>>起至后面的内容是把结果写入记录文件,如果不需要可以删掉。
修改完后输入:/ect/init.d/cron restart 更新一下
3.6 群晖添加计划任务定时启动pgyvpn
群晖上的守护程序不想折腾,直接在群晖上计划任务里添加脚本(已在3.3节用命令行生成)
3.7 群晖所在网络主路由添加静态路由
我的是爱快软路由,添加静态路由如下,使得所在网络能够访问对端PVE机及其所在网络
如果是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即通!
我也不打算修改主路由设置了,这样只是把需要连通的设备设置一下旁路由网关,更加安全可靠。
四、总结
(本节有待试用一段时间后补充)
这个玩法也可以变通一下组合,比如PVE对PVE,群晖对群晖,各种方案自行选择。
另外,秒开软路由还有远程登陆通道、远程打开内部客户端、异常通知报警等功能,有待进一步摸索。
还有PVE机的pgyvpn好像不太稳定,偶尔ping不通。因此,我在crontab文件里又添加了定时重启脚本了。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
















值友1361260810
校验提示文案
闪现幺
校验提示文案
108s
校验提示文案
charleypeng
校验提示文案
适合自己的才是值得的
无公网IP内网穿透和异地远程办公,常规是做内网IP端口映射到互联网,如FRP或nat123映射外网访问。
校验提示文案
gunpen
校验提示文案
sontjer
校验提示文案
适合自己的才是值得的
无公网IP内网穿透和异地远程办公,常规是做内网IP端口映射到互联网,如FRP或nat123映射外网访问。
校验提示文案
charleypeng
校验提示文案
sontjer
校验提示文案
gunpen
校验提示文案
108s
校验提示文案
闪现幺
校验提示文案
值友1361260810
校验提示文案