V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
HawkinsSherpherd
V2EX  ›  宽带症候群

没有公网 IP 的不必迷信 Full-Cone NAT

  •  
  •   HawkinsSherpherd · 10 天前 · 3222 次点击

    其实有公网 IP 的也不用迷信 Full-Cone NAT ,有是不错,没有也不用强求。

    RFC 4787 ( Network Address Translation (NAT) Behavioral Requirements for Unicast UDP )中,定义了使语音,游戏等 UDP 应用正常工作的 NAT 行为要求:

    1. 必须使用 Endpoint-Independent Mapping 的 NAT 映射模式
    2. 建议以“对齐”的方式从 IP 地址池中分配 NAT 地址
    3. 不可为不同的内部 IP:端口组合复用同样的 NAT 地址:端口组合
    4. 建议 NAT 网关以奇偶对称的方式分配端口
      • 奇数的内部端口分配奇数的外部端口,反之亦然
    5. UDP NAT 映射关系的存活时间不可低于两分钟
      • 例外情况:一些运行在公认端口范围( 0-1023 )内的应用
    6. 必须要有出方向的 NAT 映射关系存活时间刷新机制

    Full-Cone NAT ( NAT 1 ),Restricted-Cone NAT ( NAT 2 )等术语的定义位于 RFC 3489 ( STUN - Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs)) 中,它们都具有一个共同的特点:

    从 NAT 1 到 NAT 3 ,它们都将相同的内部 IP:端口组合映射到同样的外部 IP:端口组合上,无论访问的外部主机 IP:端口组合如何,符合 Endpoint-Independent Mapping 的定义。它们都满足使语音,游戏等 UDP 应用正常工作的第一则要求。

    而 Symmetric NAT ( NAT 4 ),理论和实践中都不满足使语音,游戏等 UDP 应用正常工作的要求:

    1. NAT 4 不对不同的外部主机 IP:端口组合复用 NAT 地址:端口组合,每发起对一个新的外部主机 IP:端口组合的通信都会生成一个不重复的 NAT 地址:端口映射,配合严格的过滤策略,使得隐藏在 NAT 4 之后的端点没有一个对除中转服务器之外的端点确定可用于外部主动连接的 NAT 地址:端口映射组合。
    2. NAT 4 严格的 NAT 过滤策略使现有的 NAT 映射关系无法被复用,即便服务器知道一个存在的外部端点,这个端点也只能给服务器用,不能给其它端点使用。

    有的朋友可能会说了,NAT 1 和 NAT 2 理论上也能和 Symmetric NAT 打洞 P2P 通信,所以 Full-Cone NAT 是有意义的:

    • Full-Cone NAT 的 NAT 映射关系全网可用,可以让 Symmetric NAT 背后的端点主动连接 Full-Cone NAT 的端点。

    • Restricted-Cone NAT 只要向 Symmetric NAT 的外部地址发送“敲门报文”(敲自己的门)建立本地的 NAT 映射关系,之后 Symmetric NAT 就可以连过来了。

    但这是规范之外的行为,只能与特定类型的用户打洞并不符合规范要求,无情地说,NAT 4 用户能不能打洞是不值得关心的,因为本来就不能。

    而且,Full-Cone NAT 具有一定安全风险:

    • Full-Cone NAT 的 NAT 映射关系全网可用,如果你使用的应用安全设计薄弱,一旦 NAT 映射关系暴露(攻击者攻击应用服务器,或是端口扫描),则你的主机可能遭遇攻击

    结论:如果只是个臭打游戏的,也没有公网 IP ,只要不是 NAT 4 ,日子都还过得去。

    32 条回复    2024-12-18 09:23:03 +08:00
    wtks1
        1
    wtks1  
       10 天前
    但现在的网络都挺两极分化的,不是 nat1 就是 nat4 ,nat2 和 nat3 都没见过....
    HawkinsSherpherd
        2
    HawkinsSherpherd  
    OP
       10 天前
    @wtks1 用 iptable 的路由器可能会有 NAT 3 ,因为 iptables 的 MASQUERADE 默认用 Endpoint-Independent Mapping 的 NAT 映射模式,而 iptables 的 NAT 过滤模式用的是 Address and Port-Dependent Filtering 。
    6a82aa9bfe
        3
    6a82aa9bfe  
       10 天前 via Android
    @HawkinsSherpherd 也就是说 openwrt 默认 nat4
    lsylsy2
        4
    lsylsy2  
       10 天前
    @6a82aa9bfe linux 不打补丁都是的,不过 openwrt 一般都有 upnp/nat-pmp 所以问题不大
    totoro625
        5
    totoro625  
       10 天前
    OP 想表达的意思是:NAT2/3 略差于 NAT1 但是依旧能用,等同于有公网 IP ,只要不是 NAT4 就行 吗?
    HawkinsSherpherd
        6
    HawkinsSherpherd  
    OP
       10 天前
    @totoro625 对了一半,没有公网 IP 就是没有,无论是 NAT 1 还是 NAT 3 ,都没有能让任意外网主机随时主动连接的端口,即便是 NAT 1 也要用些奇技淫巧。
    HFX3389
        7
    HFX3389  
       10 天前
    说实话,我还没见过 NAT 2 和 NAT 3 ,而且一般来说网络管理都不会专门设置 NAT 吧,都是敲完命令通了就行,都是 NAT 4 。

    > 只要不是 NAT 4 ,日子都还过得去。

    但是只要是 NAT ,基本都是 NAT 4
    amyw495062
        8
    amyw495062  
       10 天前
    所以专线才是最优解,家宽的公网迟早都要没
    amyw495062
        9
    amyw495062  
       10 天前
    全广东联通现在新装没公网的应该基本都是入户 nat4 了,贴吧还有一群人舔着联通那 b 吃相,比移动贵还不如移动,移动好歹大部分还是 nat1
    totoro625
        10
    totoro625  
       10 天前
    @amyw495062 #9 坐标江苏,两条移动,上传超过 200G 就掉 NAT4 了
    想想光是 iPhone 备份,每天备份超过 5G 很快就超限了
    amyw495062
        11
    amyw495062  
       10 天前
    @totoro625 就算要这么执行也没办法,我们这边广东移动就还好,但也都是暂时的,谁知道以后呢,我们这都陆陆续续出现老用户电信和联通被回收公网的,虽然可以走投诉要回,但他们就是吃一个算一个,下一步电信移动估计也都是要学联通默认就直接入户 nat4 了,现在各大运营商为了应对 pcdn 只能一刀切
    bibiisme
        12
    bibiisme  
       10 天前
    但是运营商现在不是 nat1 就是 nat4 啊
    jimao54
        13
    jimao54  
       10 天前
    我也觉得我们大广东很快就三网集体 nat4 了
    titanium98118
        14
    titanium98118  
       10 天前
    都公网 ip 了,nat 几不是自己说了算吗?
    titanium98118
        15
    titanium98118  
       10 天前
    @titanium98118 #14 sorry ,标题看错了
    fengyaochen
        16
    fengyaochen  
       10 天前
    公网 IP 运营商 QOS UDP 和 NAT4 没啥区别
    chouxw112233
        17
    chouxw112233  
       10 天前
    楼上说不是 1 就是 4
    但我家就是 NAT3 ,换了个运营商也还是 3 ,是路由器拨号的
    路由器关系吗
    wtks1
        18
    wtks1  
       10 天前   ❤️ 1
    @chouxw112233 #17 这种情况,你家应该是 nat1 的,只是路由器的关系才变成 nat3
    HawkinsSherpherd
        19
    HawkinsSherpherd  
    OP
       10 天前 via Android
    @wtks1 确实,我之前用家用路由器拨号是 NAT 1 ,换成 ER-X 之后就是 NAT 3 了。
    frankilla
        20
    frankilla  
       10 天前
    公网 IP+full nat 。没感觉有啥用啊,我也不玩什么联机游戏。
    gaju
        21
    gaju  
       10 天前
    自从有了收割机 ipv6 ,这些上古牛耕马犁 nat 碰都不碰了
    datou
        22
    datou  
       10 天前
    f-nat 也不耽误运营商限制 UDP
    TESTFLIGHT2021
        23
    TESTFLIGHT2021  
       10 天前
    现在智能 QOS ,管你 NAT 几
    MFWT
        24
    MFWT  
       10 天前
    > 即便是 NAT 1 也要用些奇技淫巧

    我就是奇技淫巧用户,打洞之后用 TCP 直连(具体来说是 Shadowsocks UoT + tun2socks ),因为没有了 UDP 限制,比 UDP 打洞体验好太多
    ZE3kr
        25
    ZE3kr  
       10 天前 via iPhone
    我用的 Google Fiber 是 NAT Type 2
    ZE3kr
        26
    ZE3kr  
       10 天前 via iPhone
    测了一下发现蜂窝网络也是 NAT 2
    lns103
        27
    lns103  
       10 天前
    别的都好说,走服务器 frp 中转,走 ipv6 等,但是 BT/PT 下载做种确实需要一个开放的 v4 端口,有 Full Cone NAT 就还有救
    qwvy2g
        28
    qwvy2g  
       9 天前
    NAT 行为按照 RFC5780 定义分成出站映射和入站过滤两个部分。Endpoint-Independent Mapping 无论外部主机的目的 IP 和目的端口是什么,只要源 IP 和源端口相同,NAT 都会将所有出方向的报文转换为相同的端口映射出去。Endpoint-Independent FilteringNAT 检查入方向目的 IP 和目的端口时,不关心外部主机的源 IP 或源端口值。按照 RFC5780 定义 Ful Cone NAT=EIM+EIF 。nat 出战和入站策略各有三四种,比如 restricted cone NAT=EIM+ADF ,PortRestrictedCone=EIM+APDF 。这种分开的设置可能在企业出口的防火墙设备上可能会有,普通企业路由器和家用路由器没有这种功能。
    ZardCzz
        29
    ZardCzz  
       9 天前
    @amyw495062 广东联通吃相太难看了,之前的 NAT1 偷偷改成 NAT4
    amyw495062
        30
    amyw495062  
       9 天前
    @ZardCzz 最搞笑的是联通无论怎么搞,也会有一群人无脑捧联通,都已经变成这种烂货了,广东还有一群人推荐装联通,比移动贵还比移动烂也还好意思说联通便宜好用,联通有底气这么搞也就是因为有着这么一群舔狗用户
    thereone
        31
    thereone  
       9 天前
    有 NAT1 会好多了,我就是 nat1 然后用 lucky 打洞加 cloudflare 302 跳转直接就可以输入自己的域名访问搭建的服务。直连访问效果比中转好太多。
    txydhr
        32
    txydhr  
       8 天前 via iPhone
    @amyw495062 你自己不装不就行了,对面可能连真人都不是
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1011 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:21 · PVG 06:21 · LAX 14:21 · JFK 17:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.