最近入坑软路由,走了不少弯路,踩了不少坑,目前正常运转起来了,能通过域名(绑定IPV4或IPV6)远程访问到家里的Openwrt,所以把自己摸索出来的方法说一下,供新手参考
总的来说,从外网访问家里的设备,就是注册域名,将域名绑定到家里设备的IP(IPV4或者IPV6),具体步骤如下:
一、网络结构
我是用的软路由做主路由,安装PVE后虚拟了Openwrt进行桥接拨号,主路由再接交换机,交换机接了两个AX6组MESH,大致结构如下
二、IPV4公网IP获取
我办理的是电信200M宽带,默认不给公网地址,因为公网IPV4地址越来越少。
我第一步给10000号打电话,客服说请示一下给我答复。半小时后给我回电话,说可以发公网IP,但是需要每个月办理一个20元的套餐。我不同意,表示要投诉。
客服登记后,第二天电信的一个经理回电说根据政策,2020年10月以后新申请的宽带都不能免费申请公网IP了,必须办20元的套餐。我表示抗议,表示要投诉到工信部(唬人的。。)
第三天这个经理再回电问我是否同意关闭这个投诉,我不同意。然后她说会转到技术部门联系我,要我注意接听
当天下午,一个略带口音的男人给我打电话,听背景声音是在机房里面,我立马脑补了一副IT程序猿的形象:胡子拉碴,发际线上移,格子衬衫,坐在四个显示器面前,屏幕上各种代码飞滚,黑框眼镜后面透露出一丝犀利的光芒哥们上来就问我,你是要申请公网IP是吧?我说是的,正准备凭我三寸不烂之舌来说服他的时候,那边就说,15分钟重启一下光猫就可以了。然后啪的就挂了电话。。。
结果5分钟之后我就在openwrt里面重新拨号就获到了公网IP了
。可以在百度里面输入“IP”查看结果,把这个结果与OPENWRT-网络-接口-WAN中获取的IPV4地址对比,如果是一样的那就说明成功获到公网IP了
三、IPV6地址获取
如果实在拿不到IPV4地址也没关系,IPV6一样好使。IPV6是一种终极解决方案,理论上它可以为地球上的每一粒沙子分配独立的IP地址。所以只要用上ipv6,我们可以轻轻松松给每个设备分配一个独立的IP地址。而且随着宽带技术的进一步普及,现在的三大运营商都已经提供了ipv6网络服务。当然你也可以打客服电话问一下是否支持IPV6。获取IPV6地址的方法如下:
1.修改网络-接口-WAN6(如果没有就新建)
特别注意:物理设置中要选择“@wan”,如果没有这个选项就在下面的自定义端口中输入:@wan,保存即可
2.修改WAN口和LAN口设置
按照上面的设置,这个时候应该可以正常获取到IPV6地址了,我们可以去www.test-ipv6.com 测试下网络是否连通了IPv6。如果网站的测试通过,说明我们已经成功拥有了IPV6地址。
在我们的接口中也可以看到有240e开头的IPV6地址了
电信是240e开头的(240e::/20)
移动是2409开头的(2409:8000::/20)
联通是2408开头的(2408:8000::/20)
四、设置防火墙
拥有ipv6地址是第一步,接下来我们要设置防火墙,让外网设备可以访问内网的IPV6设备。
进入网络-防火墙-通信规则,新增一条“ipv6”,注意“限制地址”可以只选“仅IPV6”,目标端口限定一些指定的端口(用空格分开),如“1100 8822”,这样更加安全些
保存应用后,我们可以从外网直接输入地址进行访问,也可以用手机关掉WIFI用数据访问,但是要注意访问地址形式为(注意加中括号):http://[240e:380:80c:8403:a47a:f490:354:95cf]
五、域名注册和解析
虽然我们现在可以直接用IP地址访问了,但IPV6地址的地址太长太难记了,这时我们可以注册一个域名,将域名与将IP地址绑定起来。以腾讯dnspod为例:
进入dnspod.cn注册一个域名,这个应该大家都会,.xyz和.top之类的域名都挺便宜,注册成功后进入“我的域名-点击域名-添加记录”
增加两条解析记录v4和v6,分别对应IPV4和IPV6,如果只有一类地址则可以只加一条解析,需要注意IPV4用A类解析,IPV6用AAAA类解析,后面地址填写自己获到的公网IP
需要特别注意:如果如下图顶部提示红色解析错误,那么是无法访问的。我折腾了几天后来发现,原来是需要备案
备案入口点击左边的“域名注册”,右边会提示“未实名”,按照要求准备信息模板,提交管理局审核即可。大概1-2天就会通过了
六、动态域名DDNS解析设置
域名能正常解析后,我们应该就可以通过域名地址访问家里的openwrt了,如v4.xxx.top或者v6.xxx.top
但是由于目前IPV4和IPV6的地址也是动态分配的,设备重启或者过段时间ip地址就会有变化,所以我们还需要一个步骤就是在公网IP地址发生变化后,及时更新到dnspod中的对应解析地址
这个时候我们就需要动态域名解析DDNS。我尝试了系统自带的动态dns,下载了腾讯官方的ddns插件,从网上看了N个教程都不行,最后还是自己在github解决了
在github中搜索“ddns”,第一个结果就是https://github.com/jeessy2/ddns-go,经我自己测试非常好用,并且简单清晰,界面科学!感谢“jeessy2”大神!
1.首先下载对应的软件包https://github.com/jeessy2/ddns-go/releases,比如我的是X86的,就下载“ddns-go_3.3.5_Linux_x86_64.tar.gz”
2.解压后得到“ddns-go”,将该文件通过openwrt的“系统-文件管理”,上传到一个指定目录,注意不要上传到“/tmp”中
3.用pve进入openwrt的命令界面,进入ddns-go所在文件夹,输入“chmod 777 ddns-go”修改一下权限
4.输入“./ddns-go -s install”安装服务,安装会有两行提示,没有报错应该就成功了。可以用“ls /etc/init.d |grep ddns-go”看一下是否安装好了
5.此时输入openwrtIP:9876就可以通过web访问ddns-go进行配置。其中ID和TOKEN在dnspod登录后,右上角点击头像-我的账号-API密钥管理-DNSPod Token进行新建。
注意:不要用“腾讯云 API 密钥”的方式。另外,获取IP方式可以先用网卡获取试试,如果获取不正常可以用“通过接口获取”,实测稳定性还是不错的。
设置成功后,ddns-go页面的右侧就开始正常动态解析了,默认是5分钟解析一下。当openwrt的公网IP地址发生变化时,会自动获取最新IP,同步到dnspod中
6.最后一步,很重要!将ddns-go设置为开机自启动:ln -s /etc/init.d/ddns-go /etc/rc.d/S50ddns-go
至此,所有的设置都已经OK,通过v4.xxx.top或者v6.xxx.top在办公室正常访问家里的设备了。
另外需要注意,如果v6域名打不开,看看自己外网环境是否支持IPV6,比如我在公司就只能用V4地址,用不了V6。但是手机是两个地址都支持的。