「NAT」- 内网穿透,NAT 穿透,NAT Traversal

问题描述

NAT 技术虽然能使私网访问公网,但是 NAT 技术也有一定缺陷:
NAT 对于私网访问公网的流量会生成 NAT 映射表项,这些表项有老化时间,如果两端会话长期静默,则连接会中断;
NAT 由于隐藏了私网 IP 地址,对于一些服务器来说,为了防止 DOS 攻击,会限制同一 IP 的访问频率。部分应用也没法有效溯源原始 I 设备,导致网络管理定位困难;

该笔记将记录:进行内网穿透的工具及方法,以及相关问题的解决方法;

解决方案

为了解决 IP 端到端应用在 NAT 环境下遇到的问题,产生了多种 NAT 穿越技术:

目前NAT穿越的方法很多,主要包括以下几种:
UPnP(Universal Plug and Play)
ALG(Application Layer Gatewqy)
MIDCOM(Middlebox Communications)
Full Proxy
STUN(Simple Traversal of UDP Through Network Address Translators)
TURN(Traversal Using Relay NAT)
ICE(Interactive Connectivity Establish)
STUNT

如果是网络工程师,我们能够直接在路由设备上完成内网穿透工作,我们主要学习 ALG、STUN 技术;

原理简述

使用 FRP(FAST REVERSE PROXY)工具

fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.

首先,需要有公网服务器,才能进行后续操作

Access your computer in LAN by SSH

第一步、在服务端运行:

cat > /etc/frp/frp-server.ini <<EOF
# frps.ini
[common]
bind_port = 7000
EOF

./frps -c ./frp-server.ini

第二步、在客户端运行:

cat > /etc/frp/frp-client.ini <<EOF
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
EOF

./frpc -c ./frp-client.ini

映射端口范围

frp/README.md at dev · fatedier/frp · GitHub

range: 开始的名称:

# frpc.ini
[range:test_tcp]
type = tcp
local_ip = 127.0.0.1
local_port = 6000-6006,6007
remote_port = 6000-6006,6007

参考文献

NAT traversal – Wikipedia