本帖最后由 8267 于 2023-12-10 10:03 编辑
对于没有公网ipv4 也没有IPV6地址,有内网穿透需求,而免费的服务器速度太慢的,可以借助这个程序让自己的宽带实现为动态公网IP的效果。访问速度是自己宽带的速度。但并不是所有的宽带都可以用。看个人运气了,可以用的话很稳定。(@xf110测试过,移动宽带)
这个方案也是从@xf110学来的,我也不太懂这些,纯小白一个,请教他怎么使用frp的时候学来的这个natmap插件,可以内网进行打洞成为动态公网的效果,搭配frp之类的可以跑满宽带。这个只能实现一个端口开放,如果访问多个端口,可以尝试多开natmap,生成多个公网ip端口配合cf的ddns域名进行访问。目前有论坛网友测试六开natmap 生成6个公网ip和端口配合cfddns实现了frps 和frpc 还有4个端口用来远程ssh 成功访问。512M的新三开机可用440M六开natmap后剩余三百多M可用内存。六开仅占用约100M内存。运程访问速度取决你的宽带速度,比免费的内网穿透限速又限端口的好多了,
natmap项目地址:https://github.com/heiher/natmap
作者的介绍:
NATMap实现与拥有动态公网IP同等的访问效果,它通过打通完全锥型(Full cone)类型NAT的TCP、UDP端口,实现访问侧任意主机在无需客户端的情况下进行直连访问。
在4种典型NAT实现中,完全锥型(Full cone)类型NAT(也简称为NAT-1,是访问限制较为宽松的NAT实现。具体定义为:所有从同一个私网IP地址和端口(IP1 : Port1)发送过来的请求都会被映射成同一个公网IP地址和端口(IP2 : Port2)。并且,任何外部主机通过向映射的公网IP2和端口Port2发送报文,都可以实现和内部主机IP1 : Port1进行通信。所以从技术原理上,当NATMap从内网侧主动建立一路TCP连接或发起UDP访问,就能触发NAT建立私网侧与公网侧地址间的端口映射关系。在NATMap的维护下,NAT会话将能持续保持,也就能持续允许公网侧任意主机访问内部主机。访问效果上等同于拥有了一组公网IP:端口。
其实就是需要网络类型是NAT1的,大部分宽带只要光猫桥接,路由器拨号,开启upnp基本也是nat1 但也不是nat1就一定可以成功。
可以下载NatTypeTester软件进行测试,
我的移动大内网测试是Full cone
也可以直接下载 程序在路由器里运行测试 下载后解压出natmap 用 winscp之类的软件上传 如winscp 选scp协议
上传到路由里 ,比如我上传到 /etc/storage/bin/natmap 并赋予执行权限 当前版本为 20230820
如果想要新版本 可自行前去heiher/natmap 查看 如有新版本 可下载新版本 natmap-linux-mips32el 程序 并改名natmap上传到这个文件夹 并赋予执行权限
测试你的网络可不可以用的话 首先关闭防火墙 再打开ttyd 或者 ssh 用命令启动 输入刚刚上传的程序 加启动命令
- /etc/storage/bin/natmap -d -s stunserver.stunprotocol.org -h qq.com -b 6336 -t 192.168.2.1 -p 80
复制代码 其中qq.com 是公网地址 也可以用baidu.com 6336 为侦听端口 与外网通信的端口 不能和路由器里其他端口冲突 192.168.2.1 是路由器lan地址修改为你的 80 是路由器管理端口
执行后,会出现以下信息 然后不要进行任何操作 不要关闭窗口
会生成一个 公网IP 和 端口 和 IP4P 地址,这时 你用手机流量 输入生成的这个公网IP:端口36.157.141.216:11991 试试能不能访问到路由器,如果可以访问 恭喜你!你的网络打洞成功了可以用,如果不能访问那说明你的网络打不了洞,没戏了,不一定所有网络都成功的,只有路由器拨号的 关闭防火墙 开启upnp (奇怪的是有个别用户需要关闭UPNP才能打通)才能测试准确, 测试完再关闭防火墙。
如果可以的话,那就相当于你是公网IP了 ,可以继续往下看了,由于这个插件生成的公网ip是动态的,会变化所以需要配合ddns才行
写了个启动脚本( 只能padavan固件用,非专业的不太完美 有什么问题的话可以自行修改) 下载脚本解压 上传到/etc/storage/natmap.sh 并赋予执行权限
然后编辑这个脚本 修改里面的参数,你的ddns服务商是哪个 就把下方的#去掉 三选一 不能都去掉 再修改脚本的路径
natmap程序和ddns脚本的 路径、名称 必须和上传的保持一致 不然启动错误的
然后在路由器里 外网WAN - 端口映射(upnp) 里 打开手动映射 添加一条规则 端口范围填上面脚本里的那个wanport 端口号一致 内网ip 和上面那个lanip地址一致 本地端口和上面脚本里的 lanport 一致 协议选择both 添加即可
接下来选择ddns脚本 上传吧, 三个ddns 任选一个吧 免费的有dynv6 付费的有阿里云 cloudflare 我推荐使用cfddns
一、阿里云ddns 脚本 下载解压并用winscp之类的软件上传到闪存里就是上面脚本里修改的ddns路径 例如/etc/storage/bin/aliddns.sh 并赋予执行权限
然后编辑这个脚本 修改里面的参数为你自己的
阿里云的Access Key 不懂获取的 自行搜一下教程吧 简单讲一下吧
首先进入阿里云 主页 点右上角有个 Access Key管理 点进去 然后新建一个 子用户 需要添加的权限如下
后 生成key密钥 填写到脚本里
填写好你的阿里云密钥后 把这个aliddns.sh 重命名为aliddns 不要后缀了
二 、cloudflare的 cfddns 下载解压并用winscp之类的软件上传到闪存里 上面脚本修改的ddns路径 例如/etc/storage/bin/cloudflare.sh 并赋予执行权限 想用免费的域名去欧盟申请 几分钟就可以了 dns记录添加cf的
然后编辑脚本里的token 域名为你的
这个host0=“” 需要在cf官网dns解析那里添加一个随意的ip开启代理解析 这个就是用来外网直接访问设备用的域名 保存后 重命名为cfddns 不要后缀 如果你有其他ddns服务商的域名也可以添加到cloudflare 解析 (cloudflare不再支持添加免费域名到cf解析了) 我以阿里云添加为例 进入cloudflare主页 点右上角 切换为中文 (看得懂英文忽略)
然后在主页添加网站 网站必须填顶级域名 如阿里云申请的 abc.com 添加好后会提示dns服务器不是他的 需要修改为他的服务器才能享受服务
这时候进入阿里云主页 点左上角导航栏 找到 域名 点进去
再点域名列表 找到你的域名 再点管理
进去后 找到
点进去修改dns 为cf要求的那个 就行了 提交后 在cf那里点击查询应该是还更新 会让你等结果 检测是否更改 过半个小时一个小时再进去看 成功了会显示你添加的域名 点你这个域名进去 在右下角有个获取API令牌
点进去后 再点 创建令牌 选自定义令牌
然后添加规则 选项
大概需要这些 红圈的必须要有 这么填 最后 部署保存
token就是第一个 API令牌 点右边的...选项 再点投放 就可以查看token 下方的是api key
然后去cf添加一个页面规则
上面的abc.com填你的域名
最后在cf脚本里填写好你的token key 账户邮箱 即可 就会自动更新ip4p到你的域名 也会把域名重定向 转发到公网ip 之后直接域名即可访问
保存即可 这样运行natmap那个脚本就可以绑定到域名直接访问了 脚本会自动更新ip 更新规则 重定向转发url 需要手动创建的就是那一个 host0 你用来外网访问的域名 其他都不用创建 脚本会自动帮你新建 自动更新 自动删除重复的域名
如果不能正常解析 留言评论 我帮你看看 如果提示重定向规则失败 注意检查api令牌的权限是否添加了重定向权限 再尝试在页面规则那里的重定向规则 手动新建一个重定向规则 随意填写 只要新建成功就好 再删除即可 因为从来没用过重定向规则的 脚本有可能无法获取你的重定向ID 这个功能 所以如果重定向失败 就需要手动新建一个重定向规则 删除后 就可以更新了
目前发现大家反馈natmap好像只能开放一个端口用来外网访问,哪怕搭配frp也是只能访问一个设备,不方便,于是可以多开natmap实现生成多个端口用来访问不通端口应用,修改natmap里的启动脚本natmap.sh 里面的 启动命令 增加一条就是多开一个进程 如下图 "$natmap" -d -s stunserver.stunprotocol.org -h qq.com -b 外网端口 -t 设备ip -p 设备端口 -e 动态ddns脚本路径 如改为 "$natmap" -d -s stunserver.stunprotocol.org -h qq.com -b 7888 -t 192.168.123.1 -p 5244 -e /etc/storage/bin/cfddns2 每一开的端口 ip ddns路径 都不能相同 最后的 /etc/storage/bjn/cfddns2 为ddns脚本 需要复制 比如一开 /etc/storage/bin/cfddns 二开 就要复制一个为/etc/storage/bin/cfddns2 的文件 三开就/etc/storage/bin/cfddns3 保持和启动命令里的ddns脚本路径对应即可
每一开的ddns脚本文件也需要修改 不能相同 除了 token key 邮箱可以相同 域名不能相同 如下图 多开的话还有下面的转发规则也要修改不一样的名称,不然第一开更新好了。第二开的时候就删掉第一开的规则 导致第一开失效 如下图 第一开是natmap的名称 第二开可以改为natmap2 每一开保持不一样即可 最后保存 赋予执行权限
最后启动脚本就可以了 外网访问的域名就ddn脚本里的host0=的域名 如果开启了防火墙,那么多开的话就需要放行相关端口(就是-b 端口号)
三、 dynv6 ddns 下载解压并用winscp之类的软件上传到闪存里 上面脚本修改的ddns路径 例如/etc/storage/bin/dynv6.sh 并赋予执行权限 然后编辑脚本里的密钥域名为你的 这个怎么注册 获取token 自行找一下教程吧 我的登录不上 无法截图示例了
保存后 重命名为dynv6ddns 不要后缀
以上三个ddns用一个就行了 包括natmap脚本里的 ddns 代码去掉# 只能启用一个 部分ddns可能需要先添加一条记录才能用 那就去添加一个AAAA 记录 随便填个值 如 2001::18cc:7018:0017
然后hiboy版的padavan在路由器里的 参数设置-脚本-在路由器启动后执行里 填入启动命令 并应用保存设置 其他版的padavan不需要添加下方命令也能开机自启
- #natmap开机自启
- /etc/storage/natmap.sh start &
复制代码 在系统管理-配置管理里 点 两个提交保存到内部闪存
最后在ssh输入脚本启动 /etc/storage/natmap.sh start &
路由器日志就会提示了
目前只有cf的ddns脚本 可以直接用域名访问 比如 natmap脚本里修改 用cfddns wanport 随便填 lanport填5244 就是alist的端口 host0填想用来外网访问alist的域名
在cfddns脚本里填好token 邮箱 api key 和 两个域名 例如cloudflare_host填123 cloudflare_domian=abc.com 还有访问alist的域名 host0=alist.abc.com(host0这个域名需要手动添加A记录并开启cf代理) 启动natmap脚本后会自动解析ip和端口到域名 这样外网输入alist.abc.com 就可以直接访问你的alist了
只有cf ddns可以这样 直接域名访问 其他域名商需要备案才能这么做 也就是url转发
最后,开启防火墙的话 需要放行端口, 在外网wan-端口映射里 打开手动映射 随便填写一个名称 端口范围填脚本里你设置的wanport端口 内网ip 填脚本里你设置的内网设备ip 端口范围 填脚本里你设置的lanport端口 然后添加 应用保存设置
ip4p 不是ipv6地址!是把十进制的公网ip:端口转换成十六进制 也就是ip4p 例如 2001::f21:78e5:2cdc 其中f21 转换成十进制就是3873 78转换后是120 e5转换后是229 2c转换后是44 dc转换后是220 其实natmap生成的 就是120.229.44.220 3873 2001::f21:78e5:2cdc padavan十六进制转换十进制命令是 echo $((0xf21)) 其中f21是十六进制 就会得到十进制的数值 或者 用printf %d 0xf21 其中f21是十六进制 也会得到十进制数值 用printf %x 120 是把十进制转换回十六进制 其中120是十进制 就会得到十六进制的数值f21
所以如果域名没有备案的话,是不能绑定ip加端口 直接用域名访问,一般的插件也无法识别ip4p的地址,那就可以把ip4p绑定到域名,用命令设置定时解析这个域名的ip4p地址有没有变化,然后用命令把ip4p这个十六进制转换成十进制的公网ip+端口 这样让其他插件可以用。此方法也是由论坛用户xf110提供!
注意:
frpc需要下载作者的frpc才行 https://github.com/heiher/frp
https://github.com/heiher/frp/re ... linux_mipsle.tar.gz 解压出里面frpc
因为natmap是生成IP4p 只有他的frpc才能识别IP4P地址 而官方的frpc无法识别域名的IP4P地址而无法连接到frps
frps可以用官方的frps
不太懂的 可以看看 作者的natmap教程:https://github.com/heiher/natmap/wiki/NATMap
本教程从论坛用户 xf110 那里学来的 https://www.right.com.cn/forum/space-uid-347621.html
这种玩法可以跑满你的宽带速度
1.如果你只需要把本机的一些应用用来外网访问 只需要多开natmap 配合cfddns即可 例如 本机的alist 5244端口 下面的nas 5288端口(自行映射到路由器) 两个应用就两开natmap 配合cf 对应5244 5288 即可 这样cf域名就可以直接访问alist 和内网nas了
2.如果你需要本机和异地的机器一些应用来外网访问 需要本机安装natmap 和frps 例如本机的alist 5244 异地的nas 5288 (异地自行映射到路由器或者nas直接装frpc) 这样alist和异地只是两个端口 就需要本机两开natmap 一个给本机的 5244(cfddns) 一个给本机frps (这个阿里和dy6ddns都可以因为frp只需解析2001而已)(不过有个bug在这里 本机运行了natmap就不能用frps了 只能本机下面的其他设备装frps 把端口给下面的机器)下面的机器安装frps 即可
异地机器需要安装 natmap作者提供的frpc 上面提供了下载地址 必须用作者的 启动frpc frpc.ini里面 服务器地址 填解析带2001的域名 不要填端口 域名已经包括端口了 下面的配置和你日常使用frp一模一样自行填写需要的配置
这样用cf的域名可以访问本机的alist frp的域名(阿里 cf dy6都可以)就可以访问异地的nas
3.异地组网 两端内网设备互相访问
只需要本机一开natmap (ddns哪家都可以 只需要解析2001 即可) 7000开放端口给frps 7000端口 由于本机不能安装frps 就给本机下面的设备安装frps 7000端口 本机安装作者的frpc 服务器地址填域名 不要端口 type = stcp(本机中继所有流量访问) 或者 xtcp(p2p直连不通过本机中继流量)
例如 本机内网192.168.20.1 启动natmap 给内网7000端口 配合ddns 解析2001地址 转发7000端口给下面的 192.168.2.5设备 192.168.2.5开启frps
本机开启作者的frpc frpc.ini 服务器地址填 上面的natmap启动域名 不要端口
[common]
server_addr = 123.abc.com
#你的natmap的域名
[alist]
type = xtcp
# 只有 sk 密码一致的用户才能访问到此服务
sk = abcdefg
local_ip = 192.168.2.1
local_port = 5244
[web]
type = xtcp
# 只有 sk 密码一致的用户才能访问到此服务
sk = abcdefg
local_ip = 192.168.2.1
local_port = 80
对端设备192.168.123.1开启作者的frpc 服务器地址填natmap的域名 不要端口
[common]
server_addr = 123.abc.com
#你的natmap的域名
[alist_tisitor]
type = stcp
role = visitor
server_name = alist
sk = abcdefg
# 绑定本地端口用于访问 alist 服务
bind_addr = 127.0.0.1
bind_port = 6000
[web_tisitor]
type = stcp
role = visitor
server_name = web
sk = abcdefg
# 绑定本地端口用于访问 web 服务
bind_addr = 127.0.0.1
bind_port = 5000
这时在192.168.123.1 内网中 输入127.0.0.1:6000 即可访问那边的alist 输入127.0.0.1:5000即可访问那边的路由器web
frp更多玩法配置说明自行参考:frp官方文档
利用natmap的公网ip搭建自己的服务器?frps可以那么同理其他应用需要公网服务器的也可以,比如n2n 在安装natmap的那个机器上启动n2n服务器 natmap只需要解析2001到域名即可
另外一端启动n2n客户端 使用natmap的域名即可使用自己的服务器
原理是利用natmap 的2001 转换成ip和端口 上面说到的 2001::f21:78e5:2cdc 其中f21 转换成十进制就是3873 所以只要定时检查域名的ip是否变动如果变动就把新的2001地址转换成ip:端口再重新启动客户端就能连接到服务器了脚本如下 这种玩法来自于 论坛大佬@xf110 感谢他的研究与分享
- bijiao () {
- # 获取域名的2001地址 其中123.abc.com改为你的域名即可 后面那个233.5.5.5是解析服务器的DNS
- eval $(nslookup 123.abc.com 223.5.5.5 | awk '/2001/' |cut -d ':' -f 2-6 | awk -F: '{print "port="$3" ipa="$4" ipb="$5 }')
- #转换为ipv4地址
- port=$((0x$port))
- ip1=$((0x${ipa:0:2}))
- ip2=$((0x${ipa:2:2}))
- ip3=$((0x${ipb:0:2}))
- ip4=$((0x${ipb:2:2}))
- ipv4="${ip1}.${ip2}.${ip3}.${ip4}:${port}"
- lastIP="$(cat /tmp/var/natmapIP.txt)"
- #检查ip是否变动
- if [ "$lastIP" != "$ipv4" ] ; then
- #ip变动了 重新启动客户端
- killall edge
- echo ${ip1}.${ip2}.${ip3}.${ip4}:${port} >/tmp/var/natmapIP.txt
- /tmp/edge -d edge -a 192.168.2.2 -c test -l $ipv4 -r >/tmp/var/edge.log 2>&1 &
- fi
- }
- while true; do
- bijiao
- #每120秒执行比较,服务器ip变动则重启edge
- sleep 120
- done
复制代码 这是使用natmap自建vnts,vnt-cli连接vnts的脚本,可以参考下
上面的命令就是转换域名为ipv4地址 如果不一致就重新启动n2n客户端 只是示例 具体自行修改为你的参数 n2n如此 其他插件 也是一样
脚本用起来麻烦,我也是小白,于是叫Ai写了个c代码 ,用来解析域名输出ip:端口,我编译了padavan的 也可以自己编译
下载解压,里面的ip是解析域名的重定向地址 并解析出ipv4地址:端口 ,主要用在上面的cf域名重定向解析(只能用于解析使用了重定向的域名), -s 域名 -d 脚本路径 -t 循环时间, -d -t 可不加
例如 /etc/storage/ip -s wo.8267.cn -d /etc/storage/n2n.sh -t 120 这样就是每120秒循环检测一次wo.8267.cn域名的重定向地址 如果与旧的地址不一致 则输出 例如173.125.26.23:3655 我加了-d 所以它不会输出信息了 而是直接运行-d的脚本 /etc/storage/n2n.sh 173.125.26.23:3655 只要在n2n.sh脚本里 把edge的-l参数改成$1 就会自动识别这个服务器地址和端口了 ,只要域名的ip变动,就会自己运行n2n.sh脚本更改服务器地址
这个v6是直接转换2001::那个地址,没有使用到cf的重定向功能的(只能用于解析2001地址的),可以用这个,只需要将natmap的2001这个AAAA记录地址解析到阿里云 cf dyn6 这些域名,使用这个程序可以解析出ipv4地址:端口
例如 /etc/storage/v6 -s wo.8267.cn -d /etc/storage/n2n.sh -t 120 这个命令就是每隔120秒检测一次wo.8267.cn域名的2001地址(只检测2001地址不解析其他v6地址)然后转换成ipv4:端口,如果不一致 就执行n2n.sh 173.125.26.23:3655 这样也相当于变更n2n的服务器地址了
|