NAT1(Full Cone)利用natter实现内网穿透并在公网上访问

检测NAT类型

需要用到的工具
Python
https://www.python.org/downloads/
Natter.py
https://github.com/MikeWang000000/Natter/tree/v0.9
建议使用Linux或者直接在路由器上运行,可以获得更好的穿透效果
首先需要检测当前网络的NAT类型是否满足打洞的要求,可以使用上面这个Natter.py脚本进行检测

python natter.py --check-nat

如果如图所示,没有报错就代表可以穿透可以进行下一步操作了


如果结果是↓这样的话则说明当前网络不满足穿透条件,无法穿透

穿透NAT

测试完成之后可以尝试穿透了

比如我想穿透内网的3389(RDP)远程桌面端口需要运行脚本并输入需要开放的端口即可

此时已经显示出来使用外网访问的IP地址和端口了,但是目前还是不能连接的,需要我们进路由器映射端口才可以

这里我以Ikuai软路由来演示,具体操作根据自己使用的路由器来决定哦

添加一个端口映射吧内网的某台主机的3389端口映射到外网的3389端口上

这样就建立好了映射关系了,此时用一台外网的电脑尝试访问

发现已经可以访问了,内网已经被穿透成功了

这个方法是利用NAT1来进行打洞,并维持隧道,测试成功后可以将python脚本放在后台运行

这里我使用的是screen,使用screen

screen python natter.py 3389

此时依次按下Ctrl+A+D即可让这个窗口切换到后台并保持运行了

进阶玩法

如果需要映射多个端口,比如内网的22,3389这两个端口的时候可以使用下面这种方法

编辑配置文件

vim ./natter-config.templete.json

这里可以实现两种不一样的穿透方法

  1. 上面的不需要指定IP地址只需要指定端口号就可以了
  2. 下面的需要指定内网的IP地址和端口号,这个模式不需要路由器设置端口转发

可以根据自己需求设置不同的模式,同时建议直选其中一种,然后将另一个的IP地址删除掉

下面是全部配置文件的参数

注意:JSON 配置文件不支持代码注释,此处为说明配置用途。
{
“logging”: {
“level”: “info”, // 日志等级:可选值:”debug”、”info”、”warning”、”error”
“log_file”: “./natter.log” // 将日志输出到指定文件,不需要请留空:””
},
“status_report”: {
// 当外部IP/端口发生改变时,会执行下方命令。
// 大括号 {…} 为占位符,命令执行时会被实际值替换。
// 不需要请留空:””
“hook”: “bash ./natter-hook.sh ‘{protocol}’ ‘{inner_ip}’ ‘{inner_port}’ ‘{outer_ip}’ ‘{outer_port}'”,
“status_file”: “./natter-status.json” // 将实时端口映射状态储存至指定文件,不需要请留空:””
},
“open_port”: {
// 此处设置 Natter 打洞IP:端口。(仅打洞)
// 此处地址为 Natter 绑定(监听)的地址,Natter 仅对这些地址打洞,您需要手动设置端口转发。
// 注意:使用默认出口IP,请使用 0.0.0.0 ,而不是 127.0.0.1 。
“tcp”: [
“0.0.0.0:3456”,
“0.0.0.0:3457”
],
“udp”: [
“0.0.0.0:3456”,
“0.0.0.0:3457”
]
},
“forward_port”: {
// 此处设置需要 Natter 开放至公网的 IP:端口。(打洞 + 内置转发)
// Natter 会全自动打洞、转发,您无需做任何干预。
// 注意:使用本机IP,请使用 127.0.0.1,而不是 0.0.0.0 。
“tcp”: [
“127.0.0.1:80”,
“192.168.1.100:443”
],
“udp”: [
“127.0.0.1:53”,
“192.168.1.100:51820”
]
},
“stun_server”: {
// 此处设置公共 STUN 服务器。
// TCP 服务器请确保 TCP/3478 端口开放可用;
// UDP 服务器请确保 UDP/3478 端口开放可用。
“tcp”: [
“stun.stunprotocol.org”,
“stun.voip.blackberry.com”
],
“udp”: [
“stun.miwifi.com”,
“stun.qq.com”
]
},
“keep_alive”: “www.qq.com” // 此处设置 HTTP Keep-Alive 服务器。请确保该服务器 80 端口开放,且支持 HTTP Keep-Alive。
}

最后运行脚本即可实现多端口映射,自动更新IP等操作

python natter.py -c ./natter-config.templete.json

错误解读&解决方法

This OS or Python does not support reusing ports!
此操作系统或者 Python 不支持端口重用。
解决方法: 推荐使用内核版本 4.0+ 的 Linux 系统。
No public STUN server is avaliable. Please check your Internet connection.
没有可用的公共 STUN 服务器。请检查您的网络连接。
解决方法: 检查网络,检查防火墙是否阻止 TCP/UDP 端口 3478。
You cannot perform TCP hole punching in a symmetric NAT network.
您无法在一个对称型 NAT 网络中实行 TCP 打洞。
解决方法: 此网络无法打洞。检查您的网络拓扑。检查您是否处于多层 NAT 下。
Q:Natter 给出了外部地址,但我没有办法访问。
解决方法: 检查您是否正确配置了端口转发。检查您的目标服务是否正常启动。尝试关闭光猫的防火墙。如果处于多层 NAT 下,请在光猫或路由器下设置 DMZ 主机或者端口转发。如果上述方案不能解决改问题,则是运营商设置了防火墙,此网络无法开放 TCP 端口。

文章作者: Timo在此
文章链接: https://blog.xioxix.com/archives/277
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Timo在此!

评论

  1. Windows Edge
    1 年前
    2023-6-20 13:51:26

    给你个新的命令:
    curl https://ghproxy.com/https://raw.githubusercontent.com/MikeWang000000/Natter/v0.9/natter.py | python – –check-nat
    直接这样就能检测nat

    来自浙江
  2. OKAMA KENPU
    3 周前
    2024-7-10 1:34:43

    Great information shared.. really enjoyed reading this post thank you author for sharing this post .. appreciated

    来自湖南

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇