通过打洞实现端口映射

admin 2023年9月21日10:29:44评论14 views字数 2529阅读8分25秒阅读模式

在前面的文章中,我们讲到过在没有公网IP的情况下,利用ipv6来访问本地的网络。但是IPv6的开启需要修改光猫的配置。在没有光猫超级管理员密码的情况下,只是心有余而力不足。

什么是打洞

NAT1网络下,我们可以通过一种 “打洞” 的方式,将本地的 TCP 端口暴露至公网上,运行 HTTP 服务等。通过Natter 打洞+防火墙的转发规则。我们可以方便地将内网设备暴露在公网。

实验环境

  • 路由器(软路由)
  • Centos7 (内网主机)

检验网络

首次使用,检查当前网络 NAT 情况。我们首先克隆项目到本地环境。

git clone https://github.com/MikeWang000000/Natter.git
cd Natter
# 检验网络
python natter.py --check-nat

通过打洞实现端口映射如上图,没有任何报错的话。证明可以愉快地玩耍了。

大概率会失败的原因 你的家庭网络是NAT,不是NAT1.(目前大多数运营商网络都是NAT1)

牛刀小试

实验目的:

通过外网,访问我本地服务器(192.168.123.173:5244)alist云盘。首先我们利用Natter脚本打洞

python3 natter.py -t  5244 

-t 即tcp协议。通过打洞实现端口映射上一步完成后,我们还无法访问。因为没有指定内网设备的IP和端口。因此我们需要在路由器中进行端口转发。

端口转发

登录路由器,在端口转发中设置参数如下:通过打洞实现端口映射如上,当我们访问http://118.xxxx.xxxx.183:65317/便可以访问我们本地的5244端口。通过打洞实现端口映射

多台设备打洞

在上述方法中,我们仅仅打通了5244端口。如果有多个端口和多台设备怎么办呢?或者路由器没有端口转发功能怎么办?我们需要新建一个json文件。内容如下

// 注意: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。
}

通过打洞实现端口映射运行

python3 natter.py -c ./config.json

总结

利用此工具,我们可以很便捷地实现外网访问内网设备。但是当运营商IP发生变化时,还不能自动更新IP。因此可以参照前期的文章配合域名自动更新。此外,没有必要尽量不要将内网设备暴露在公网!

BREAK AWAY
往期推荐
01
给路由器安装网盘工具Alist
02
华硕官方固件安装alist+ddns-go(非插件)
03
无需公网IP 怎样远程访问内网设备

更多精彩文章 欢迎关注我们


原文始发于微信公众号(kali笔记):通过“打洞”实现端口映射

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年9月21日10:29:44
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   通过打洞实现端口映射http://cn-sec.com/archives/2054642.html

发表评论

匿名网友 填写信息