资讯详情

AC68U梅林固件,从ipv6设置到写脚本手动绑定ddns,通过单ipv6实现公网访问

折腾起源

设置ipv6

DDNS设置部分

打开ssh端口及服务

进入ssh界面

方法一:应用jffs自带启动脚本

方法二:默认启动梅林固件脚本目录

脚本实现部分

DDNS实现

login_token获取

domain_id获取

record_id获取

踩坑阶段

锦上添花一:用crond服务定时更新ddns

锦上添花二:远程启动

脚本源码部分

S20bindport.sh

S23myddnsd.sh

后记


折腾起源

最近偶然发现宿舍网虽然没有ipv4,但是有ipv6地址,查相关资料,问客服,发现宿舍ipv6地址可直接从公网访问。

b1b0cff9052f45e2887969f0ff2927d0.png

客服回答

还有这样的好事?好时代来了!

我随便建了一个测速网站试试,发现可以直接通过公网ip地址 端口访问,格式为[xxx:xxx:xxx:xx]:xxxx,如图

ipv6地址格式

ipv6访问的speedtest

当然,我必须考虑这台机器。当然,我可以直接访问这个网页。我用手机打开5G试试流量,自然也可以

以连通 (现在开4G或者5G流量一般都是自带的ipv6)

这里的测试结果就不放了,我只是一个小宿舍50M带宽,放出来怕丢人。

既然公网IP来了,这不得弄个ddns伺候一下?

华硕直接设置DDNS,虽然会有ipv6地址ddns但他会优先考虑绑定ipv4访问,我的ipv4地址是内网,这里只能想办法用单栈DDNS绑定域名开始折腾

设置ipv6

本来有点想跳过ipv6是设置的,但是因为我也是小白,刚接触的时候找资料很麻烦便说一句,我们一起写吧。

首先,简单的进入路由器后台不用说,好假设你不知道,win r,输入cmd回车

输入

ipconfig

找到你的默认网关

这是你的路由器后台的地址,我的路由器在这里ac68u为例

打开浏览器输入1922.168.50.1

输入帐户密码后,输入路由器后台

点ipv6的设置

这里有两种,一种是光猫桥接,路由器拨号,一种是光猫拨号。

如果你是第二种,最好把光猫的工作模式改成桥接,省去以后不必要的麻烦。接下来,以我的校园网为例

我的校园网是第一个,但我以前尝试过这个路由器作为二级路由,所以它变成了第二个。让我们从第一种设置方法开始

联机类型选Native,接口选ppp,DHCP-PD打开,其他设置可以默认

如果你是第二种,联机类型改成passthrough,其他默认

应用后随便找个测试ipv6连通网站,我在这里找的是ipw.cn

这里显示ipv优先考虑访问

如果你是第二种,你可能无法正常获得它ipv6.在这种情况下,建议更换桥接;或者有ipv6地址显示ipv4优先情况下,您可以尝试先访问ipv6.ipw.cn,若能获得ipv不要折腾6个地址。如果没有,请尝试以下设置

手动设置dns,当时我设置的是阿里。dns

2400:3200::1 2400:3200:baba::1

或者用这个公共的dns

240c::6666 240c::6644

这里的网络设置好了,有时候连不上网,图片加载速度很慢,可能是我设置的问题,建议改成第一个方案

至此成功获取ipv6地址,第二步设置ddns单栈

DDNS设置部分

如果你是openwrt,ddns设置界面应为单ipv6、直接应用就好。

如果你是华硕固件,不想太折腾刷openwrt,那我建议你刷梅林固件,因为梅林固件有自己的crond服务和他的脚本可以应用代码实现ddns

路由器路由器系统真的很烦人,因为一切基本上都在tmp包括文件夹root文件夹,包括iptables设置,包括crond设置文件。刚进来的时候真的时候,我真的很无助,不知道该怎么办。在那之后,我抛出了两种方法,都是基于ssh写脚本后进入系统

打开ssh服务2>

华硕原固件也是可以打开的,在web管理界面下,高级设置--》系统管理--》系统设置--》启用ssh,默认端口是1025,账号密码默认就是你登陆web的账号密码

进入ssh界面

这里为了方便直接用powershell自带的ssh即可

ssh <你的用户名>@192.168.50.1 -p 1025

之后输入密码就进到后台了

如果想用xshell自己设置一下就行,会用xshell应该不用多说了。

方法一:套用jffs下自带的启动脚本

这个地方我是思路很清晰,但是不知道他自带的启动脚本在哪,百度半天才知道,最小linux系统真的很难用。

目录为:/jffs/scripts

这里我用的是wan-start这个脚本

cd /jffs/scripts
vi ./wan-start

不知道写什么?等会再说,先说方法二,因为按照程序思维这里不能放脚本,这里放了方法二就会报错的,要放在两个方法外面

方法二:在梅林固件默认启动脚本目录下自建脚本

这里是自己一边百度摸出来的,随便乱逛koolshare目录,看到有很多S开头和K开头的文件,熟悉linux的同学应该就知道这里是干啥的了,但是我不知道,我还百度了一下,命名格式一定要对才能自启,目录为:/jffs/.koolshare/init.d

脚本格式为:S+两位数字+任意名字.sh

例如我的:

S20myddnsd.sh

脚本实现部分

话不多说,先直接上主逻辑

#!bin/sh                                                                                                                                                                                                                                         
                                                                                                                                                                          
                                                                                                                                                                                                                                                 
ip=$(curl ipv6.ipw.cn)                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                 
curl -s -X POST  https://dnsapi.cn/Record.Modify -d 'login_token=123456,asdklqwejlkasczxcd&format=json&record_line=默认&domain_id=123123123&value='$ip'&record_type=AAAA&record_id=123123123&sub_domain=r'

解释一下,这里是先通过访问获取ipv6地址的网站获取ipv6地址,之后调用你域名的api实现ddns,相关api你要去看文档自己去实现,我这里只能以腾讯域名商dnspod为例(8块钱先买一个dns域名一年,这和花生壳的内网穿透域名不一样,这种方法是不限速的,只取决于你自己的带宽)

DDNS实现

dnspod文档网址

API 文档首页 - DNSPod 服务与支持

为了速成,这里先把必要的列出来

首先是每次请求必带的参数

login_token String 用于鉴权的 API Token。

下面是修改必带的参数

domain_id 或 domain Integer 或 String 分别对应域名ID和域名, 提交其中一个即可。
record_id Integer 记录ID。
record_type String 记录类型,通过API记录类型获得,大写英文,比如:A。
record_line String 记录线路,通过API记录线路获得,中文,比如:默认。
value String 记录值, 如 IP:200.200.200.200, CNAME: cname.dnspod.com., MX: mail.dnspod.com. 。
mx {1-20} Integer MX优先级, 当记录类型是 MX 时有效,范围1-20。

mx{1-20}如果你不是MX记录就不必要,这里我们是AAAA记录就不用管它

record_line_id String 线路的ID,通过API记录线路获得,英文字符串,比如:‘10=1’。record_line 和 record_line_id 二者传其一即可,系统优先取 record_line_id。

如果你的shell不支持中文,就把record_type换成record_line_id,默认对应的参数为0

请求网址和方法如下

这里为了避免麻烦,我们先创建一个AAAA记录便于之后修改,开始的值可以随便填,按ipv6的格式就行

login_token获取

网页右上角找到API密钥

既然他都说了就用DNSPod Token吧

创建密钥后显示如下

domain_id获取

record_id获取

先修改一次记录,修改刚才创建好的AAAA记录,在操作日志里可以找到record_id

箭头指向括号内的就是record_id

接下来就简单了,拼接body即可

现成的如下

vi S20myddnsd.sh

#!bin/sh                                                                                                                                                                                                                                         
                                                                                                                                                                          
                                                                                                                                                                                                                                                 
ip=$(curl ipv6.ipw.cn)                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                 
curl -s -X POST  https://dnsapi.cn/Record.Modify -d 'login_token=<数字>,<一串字母>&format=json&record_line=默认&domain_id=<域名id>&value='$ip'&record_type=AAAA&record_id=<你的记录id>&sub_domain=<你想要的域名开头>'

#我本人自己用的的可以往上翻就能看到

:wq保存退出以后记得修改脚本权限

chmod +x S20myddnsd.sh

踩坑阶段

设置好了脚本以后就开始试试能不能用了,先直接运行试试效果

/bin/sh /jffs/.koolshare/init.d/S20myddnsd.sh

由于是路由器直接用脚本发送请求,ipv6对应的地址就是路由器的地址,用手机5G网shell试试域名+端口能不能连

成功连上啦

再试试web远程网页管理,连不上捏😭😭

问题出在哪呢,我第一反应想到防火墙没关,于是关闭了ipv6的防火墙

再试试,还是连不上捏😭😭😭

但是ssh正常外网访问

重启也连不上,这里应该是梅林固件有问题,于是想到去看看ip6tables设置

打开ssh

ip6tables-save

很好,没远程管理的端口,加上就解决

ip6tables -I INPUT -p tcp -m tcp --dport 8443 -j ACCEPT
ip6tables-save #查看是否成功加入端口

你也可以这样

ip6tables -L INPUT -n --line-number

得到DROP在第15号,删除它

ip6tables -D INPUT 15

再输入命令看看是否删除

ip6tables -L INPUT -n --line-number

已经成功删掉了

然后再试试连接web管理端

这里使用socat实现

socat TCP6-LISTEN:8442,reuseaddr,fork TCP4:192.168.50.1:8443&
#&为后台运行

尝试从公网访问

接下来重启路由器试试

路由器重启完毕直接兴冲冲的连接web管理端,,这是怎么一回事呢

手动排查一下

ps

没有socat的进程

ip6tables-save

没有发现防火墙开启的端口8442

1.这个自启脚本启动的时候还是没有网的,自然也就获取不到ipv6地址,更别说调用api了,而且ip6tables服务也没有完全启动

2.socat的端口监听需要占用一个shell,关闭shell的同时也就关闭了socat端口转发

于是在重新创建一个脚本S20bindport.sh添加个延时命令,在下面添加端口并且执行S20myddnsd.sh解决这个问题,S20bindport.sh如下

#!/bin/sh

socat TCP6-LISTEN:8442,reuseaddr,fork TCP4:192.168.50.1:8443&

sleep 1m

/jffs/.koolshare/S23myddnsd.sh

ip6tables -I INPUT -p tcp --dport 8442 -j ACCEPT

同样:wq保存退出并且添加权限x

chmod +x S20bindport.sh

这里考虑到S20myddnsd.sh放在init.d下可能会重复执行,于是把S20myddnsd.sh改名为S23myddnsd.sh,并将它移入上一级目录/jffs/.koolshare/下

cd /jffs/.koolshare/init.d
cp S20myddnsd.sh /jffs/.koolshare/S23myddnsd.sh
rm -rf S20myddnsd.sh

重启路由器试试

https端口8842访问web端

锦上添花一:用crond服务定时更新ddns

ipv6地址可能在一段时间内会变化,这里直接用crond实现就好了

这里已经测试过脚本加载不用延时直接可以添加任务,于是直接在sleep 1m前面加上一句即可

echo '1 * * * * /bin/sh /jffs/.koolshare/S23myddnsd.sh'|cat >/tmp/var/spool/cron/crontabs/<你的登陆用户名>  &

crontab这里也是在tmp目录下的,每次重启都会重置,折腾死我了,后边自己摸索出来的这个方法,先echo然后管道链接cat写入文件

锦上添花二:远程开机

电脑在没开机之前是没有ipv6公网ip的,可以通过路由器转发udp实现

windows设置如下:

打开设备管理器

 找到网卡

 bios设置,以我微星主板为例,PCIE设备唤醒设置为允许,唤醒事件管理设置为BIOS

路由器转发设置如下,在/jffs/.koolshare/init.d/S20bindport.sh中sleep 1m前面添加如下语句

socat UDP6-LISTEN:2333,reuseaddr,fork UDP4:192.168.50.59:9&


arp -s 192.168.50.59 d8:bb:c1:3f:d5:dd

这里d8:bb:c1:3f:d5:dd是我本机的mac地址,192..168.50.59是我路由器设置的静态ip地址

如果少了一条arp绑定,只在web管理页面设置绑定,可能在第一次开机之前没法唤醒,路由器需要等电脑开机一次才能匹配ip和mac,但是web界面能直接唤醒,使用别的软件不行

路由器设置如下

 手机上随便下一个WOL软件,设置如下

 尝试开机

脚本源码部分

socat TCP6-LISTEN:8442,reuseaddr,fork TCP4:192.168.50.1:8443&

socat UDP6-LISTEN:2333,reuseaddr,fork UDP4:192.168.50.59:9&

echo '1 * * * * /bin/sh /jffs/.koolshare/S23myddnsd.sh'|cat >/tmp/var/spool/cron/crontabs/xxx  &



arp -s 192.168.50.59 d8:bb:c1:3f:d5:dd

sleep 1m

/jffs/.koolshare/S23myddnsd.sh

ip6tables -I INPUT -p udp --dport 2333 -j ACCEPT

ip6tables -I INPUT -p tcp --dport 8442 -j ACCEPT

#!bin/sh                                                                                                                                                                                                                                         
                                                                                                                                                                          
                                                                                                                                                                                                                                                 
ip=$(curl ipv6.ipw.cn)                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                 
curl -s -X POST  https://dnsapi.cn/Record.Modify -d 'login_token=xxx,xxxxxxxxxx&format=json&record_line=默认&domain_id=xxxxxx&value='$ip'&record_type=AAAA&record_id=xxx&sub_domain=xxxx'

后记

谢谢你能够耐心看完,这是我第一次写博客,如果发现什么问题,欢迎批评指正。写这篇博客的初衷是为了记录,如果能顺便帮到你,我会很开心的。

标签: sub板端连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台