Нема описа

mrh 572a99f184 前端动态路由设想 пре 9 месеци
docs ba7385de8e release: Natter v2.0.0-rc1 пре 1 година
natter-check ba7385de8e release: Natter v2.0.0-rc1 пре 1 година
natter-docker b09a058e0f docs: Add instruction for setting version of mc server пре 1 година
.gitattributes bd66d8257e Initial commit пре 3 година
LICENSE bd66d8257e Initial commit пре 3 година
README.md 572a99f184 前端动态路由设想 пре 9 месеци
natter.py ba7385de8e release: Natter v2.0.0-rc1 пре 1 година

README.md

常用

git clone ssh://git@gogs.magong.site:10022/mrh/Natter-v2.git

BIND_IP = 192.168.2.32 # 绑定的ip地址,需要将本机哪个网卡的地址暴露在公网上,尝试进行打洞
FORWARD_IP = 192.168.2.32 # 转发的ip地址,公网访问我时,将流量转发到局域网哪个地址上,用于查看访问是否成功
python natter.py -t $FORWARD_IP  -p 80 -i $BIND_IP -b 9820
# python natter.py -t 192.168.2.32  -p 80 -i 192.168.2.32 -b 9820

Caddy https 配置

# 这是 GPT 的回答,待测试
# python natter.py -t $FORWARD_IP  -p 443 -i $BIND_IP -b 9820
# Caddy 配置示例
:443 {
    tls {
        on_demand
    }
    reverse_proxy example.com/* 192.168.2.32:8080
    reverse_proxy another.com/* 192.168.2.32:9090
}

quesions: 前后端分离是否可以设计成前端部署在不同的机器上,通过CDN提高加载速度,而后端使用另一台不同的机器,甚至多台不同的机器,或者不同网络环境。尤其在涉及文件传输、音视频流播放、密集计算、或者兼顾不同网络环境的时候。 例如,我有一台云服务器只有 2M 的上下行带宽,具备公网IPv4地址,用来作为基本的前端请求是可以的,不过客户端如果要播放视频,上传视频,就特别慢了。 于是我还有另一台服务器环境是普通宽带,不支持公网ipv4,不过支持公网ipv6,另外也可以通过nat打洞的方式暴露 ipv4 + 端口 的形式作为公网地址。 那么当前端访问的时候,得到一系列后端主机地址: 公网服务器 ipv4 : 101.126.130.39,可由反向代理 https://ai.magong.site 路由到前端页面。 普通宽带公网 ipv6: https://api.ai.magong.site 普通宽带ipv4 nat 映射:https://ip4n.api.ai.magong.site:9547 ,映射逻辑 : tcp://117.181.21.125:9547 - > ip4n.api.ai.magong.site/* 192.168.2.32:8080 。其中 ip4n.api.ai.magong.site 对应 ip 117.181.21.125 , 地址 192.168.2.32 对应后端服务器端口转发的目的地。

前端自动选择最佳的3个或者多个后端地址 base_url ,并且这个地址不是固定的,只选择最优合适的后端地址。这种设计是否可行,是否符合最佳实践,有什么前端的包可以优雅方便实现这一功能

光猫设置

设置 DMZ ,可以将任意端口暴露在公网上,例如设置 192.168.2.31 ,说明该地址的防火墙是一个 Easy Nat ,轻松实现打洞

也可以设置端口转发,在某些光猫也叫 虚拟主机。例如我当前设置:
名称:随便;

# ❗❗协议一定要有两种
协议: UDP AND TCP 

广域网主机起始ip地址,广域网主机结束ip地址:不填;

广域网连接,选择路由模式的连接,也就是当前电脑使用的联网模式;

广域网起始端口,广域网结束端口,这个如果只有1个端口如80,就2个都填写80;

启用mac映射,这个不勾也是可以的;

虚拟主机ip地址,局域网内部IP地址,看你自己的网路连接的ip地址就可以了;

虚拟主机起始端口,虚拟主机结束端口,这个如果只有1个端口如80,就2个多填写80;


Natter (v2)

Expose your port behind full-cone NAT to the Internet.

中文文档

Quick start

python3 natter.py

Or, using Docker:

docker run --net=host nattertool/natter
2023-11-01 01:00:08 [I] Natter v2.0.0-rc1
2023-11-01 01:00:08 [I] Tips: Use `--help` to see help messages
2023-11-01 01:00:12 [I]
2023-11-01 01:00:12 [I] tcp://192.168.1.100:13483 <--Natter--> tcp://203.0.113.10:14500
2023-11-01 01:00:12 [I]
2023-11-01 01:00:12 [I] Test mode in on.
2023-11-01 01:00:12 [I] Please check [ http://203.0.113.10:14500 ]
2023-11-01 01:00:12 [I]
2023-11-01 01:00:12 [I] LAN > 192.168.1.100:13483   [ OPEN ]
2023-11-01 01:00:12 [I] LAN > 192.168.1.100:13483   [ OPEN ]
2023-11-01 01:00:12 [I] LAN > 203.0.113.10:14500    [ OPEN ]
2023-11-01 01:00:13 [I] WAN > 203.0.113.10:14500    [ OPEN ]
2023-11-01 01:00:13 [I]

In the example above, 203.0.113.10 is your public IP address outside the full-cone NAT. Natter opened TCP port 203.0.113.10:14500 for testing.

Visit http://203.0.113.10:14500 outside your LAN, you will see the web page:

It works!

--------
Natter

Usage

usage: natter.py [--version] [--help] [-v] [-q] [-u] [-k <interval>]
                 [-s <address>] [-h <address>] [-e <path>] [-i <interface>]
                 [-b <port>] [-m <method>] [-t <address>] [-p <port>] [-r]

Expose your port behind full-cone NAT to the Internet.

options:
  --version, -V   show the version of Natter and exit
  --help          show this help message and exit
  -v              verbose mode, printing debug messages
  -q              exit when mapped address is changed
  -u              UDP mode
  -k <interval>   seconds between each keep-alive
  -s <address>    hostname or address to STUN server
  -h <address>    hostname or address to keep-alive server
  -e <path>       script path for notifying mapped address

bind options:
  -i <interface>  network interface name or IP to bind
  -b <port>       port number to bind

forward options:
  -m <method>     forward method, common values are 'iptables', 'nftables',
                  'socat', 'gost' and 'socket'
  -t <address>    IP address of forward target
  -p <port>       port number of forward target
  -r              keep retrying until the port of forward target is open

Usage for Docker

Read natter-docker for details.

Use cases

Expose local port 80 to the Internet, using built-in forward method:

python3 natter.py -p 80

Expose local port 80 to the Internet, using iptables kernel forward method (requires root permission):

sudo python3 natter.py -m iptables -p 80

Dependencies

  • Python 2.7 (minimum), >= 3.6 (recommended)
  • No third-party modules are required.

License

GNU General Public License v3.0