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

介绍一个可能有助于 CGN NAT 端口映射的工具

  •  
  •   feast · 2019-09-23 22:30:43 +08:00 · 8372 次点击
    这是一个创建于 1887 天前的主题,其中的信息可能已经有所发展或是发生改变。
    37 条回复    2020-01-11 15:03:47 +08:00
    intelmd
        1
    intelmd  
       2019-09-23 23:03:03 +08:00 via Android
    feast
        2
    feast  
    OP
       2019-09-23 23:06:32 +08:00
    PCP 连接在 P2P 传输中的应用

    在 NAT444/DS-Lite 场景中引入 PCP,目的就是解决 CGN 设备接入的终端用户之间的 P2P 应用(电话会议、在线游戏、P2P 传输)问题。PCP 连接在 P2P 传输中的应用如图 6-2 所示。
    图 6-2 PCP 连接在 P2P 传输中的应用示意图

    PC1/PC2 与 P2P 服务器建立 TCP 连接。
    说明:
    如下子步骤以 PC1 为例进行介绍,PC2 类似。

    PC 建立 P2P 连接,操作系统需要支持 UPnP 协议( Universal Plug and Play ),并推荐使用支持 UPnP 协议的 P2P 软件。

    PC1 用户打开 P2P 软件,软件自动向 CPE1 网关设备发送打开 UDP 监听端口的 UPnP 请求报文。
    CPE1 设备作为 UPnP Proxy,终结 UPnP 请求;作为 PCP 客户端,向 CGN1 设备发送 PCP 请求,为 PC1 用户获取公网 IP 地址和端口号。
    CGN1 设备作为 PCP 服务器,响应客户端的请求,从公网地址池中选取公网资源,建立私网 IP 地址、端口号与公网 IP 地址、端口号的映射关系,并向 CPE1 设备发送 PCP 响应报文(携带给 PC1 用户分配的公网 IP 地址和端口号)。
    CPE1 设备将获取的公网 IP 地址和端口号发送给 UPnP 请求用户 PC1,此时用户可以在 P2P 软件中查看到获取的公网 IP 地址和端口号。
    PC1 通过获取的公网资源与远端的 P2P 服务器建立 TCP 连接。
    PC1 向 P2P 服务器上报本地保存种子文件的信息,并实时上报用户状态。
    P2P 服务器收到 PC1 的 TCP 报文,解析请求报文中的应用层信息,记录 PC1 的公网 IP 地址和端口号。
    PC1 向 P2P 服务器发起查找文件动作时,服务器将拥有该文件所有用户信息均发给 PC1,其中包括 PC2 的公网 IP 地址和端口号。
    PC1 向 P2P 服务器发送下载请求(从 PC2 处进行下载)。
    P2P 服务器向 PC2 发送 PC1 的下载请求。
    PC2 收到 PC1 下载文件请求,直接与 PC1 建立 UDP 连接,上传报文给 PC1。
    PC1 直接从 PC2 下载文件,PC1 和 PC2 的 P2P 传输建立。

    目前支持 PCP 的 CPE(路由)可能寥寥无几,不过毕竟都是软件,电脑模拟即可,各位可以先用这个库探测下各地的局端情况,考虑到 NAT44,尽量电脑拨号获取 100.64 段 IP,并关闭防火墙
    feast
        3
    feast  
    OP
       2019-09-23 23:07:15 +08:00
    @intelmd V2EX 今天访问奇慢,发一个贴竟然主贴内容不见了
    feast
        4
    feast  
    OP
       2019-09-23 23:08:17 +08:00
    工具 github.com ¥ libpcp ¥ pcp,MSVC+cmake 编译
    虽然作为中国 IP 资源最丰富的运营商,电信很多地方仍然是执行了 CGN NAT 改造,一方面应对长期 IPv4 枯竭的压力,二方面通过 CG-NAT 使得单个 IP 得以成百上千倍的复用,预留了足够的用户发展空间,不过 CGN 改造对玩 PT NAS 的肯定是噩梦,尽管目前还可以通过按闹分配的方式投诉获得 IP,不过鉴于任何行得通路子在中国必定会被搞臭的经验,靠这种费时费神的方式肯定是不行的了,那么似乎 CGN ( 100.64 )下完全就没办法了? IETF 实际上在引入 CGN 的时候就同步开发了新的解决方案,即 PCP (RFC 6887)端口控制协议,由于该协议比较新,大多数设备不支持,所以目前可能这个东西能够使用的地方非常少,不过既然有,那就大胆探测下局端是否支持,目前看来,比较老的 ME60 都有相关支持软件,唯一的问题可能就是局端有没有配置(粗略看了下华为,似乎不是默认打开的),所以以后投诉如果有机会联系到工程师最好让打开 PCP,这个比回退工单相信阻力要小很多,以下摘抄自华为手册
    feast
        5
    feast  
    OP
       2019-09-23 23:16:48 +08:00
    “ME60 VSU 系列单板 PCP 功能许可证”
    感觉华为收费又会把这个搞砸,so,各位还是投诉吧
    loveqianool
        6
    loveqianool  
       2019-09-23 23:24:13 +08:00
    附言呀,贴吧直播吗?
    Buges
        7
    Buges  
       2019-09-23 23:41:43 +08:00 via Android
    那么问题来了,这个类似 UPnP 的玩意有啥正当的用途?
    直接以“我要用 p2p 应用”的理由不被驳回就见鬼了...
    feast
        8
    feast  
    OP
       2019-09-24 00:59:50 +08:00
    你大可认为该项功能毫无卵用,可是能在 CGN 上开一个 TCP 端口是非常有意义的
    wheat0r
        9
    wheat0r  
       2019-09-24 01:04:23 +08:00
    信我,让运营商去直接配设备的成功率远小于要一个公网 IP。
    另一个方面,就我观察,现在的运营商没几个用 CGN 地址段的,全是 10.0.0.0/8,能找运营商要 100.64 ,为什么不直接要一个公网地址。
    Buges
        10
    Buges  
       2019-09-24 10:09:28 +08:00 via Android
    @feast 我没说毫无卵用...至少得给个正当用途,或者说,说服工程师给你配置的理由吧。
    闹公网 ip 的人还要自称用监控之类的原因呢...
    cdh1075
        11
    cdh1075  
       2019-09-25 13:25:34 +08:00
    要一整个 ip 浪费,以后如果能每人给 100 个公网 ip 的端口就完美了
    feast
        12
    feast  
    OP
       2019-09-25 13:35:19 +08:00
    @cdh1075 PCP 这东西就是拿来在 CGN 的公网 IP 上开 TCP 洞的
    feast
        13
    feast  
    OP
       2019-09-25 13:37:42 +08:00
    @Buges 我不讨论投诉策略,怎么投诉那是你自己的事,每个人想法都不同,况且我这个东西并不需要投诉,你只要试下局端是否打开,我给的建议仅仅是你遇到坚决不给回退公网的地方的最后尝试方法,P2P 这东西本身就不受待见
    feast
        14
    feast  
    OP
       2019-09-25 13:39:01 +08:00
    @wheat0r CGN 不一定非得是这个专用段,大可自己编译去探测一下有没有反应,你说是么,探测下你会怀孕?
    feast
        15
    feast  
    OP
       2019-09-25 13:41:22 +08:00
    @wheat0r 你不想要我还不想告诉你们这东西呢,偷偷用多安逸,发出来大概率就会被运营商封堵
    ragnaroks
        16
    ragnaroks  
       2019-09-26 10:36:50 +08:00
    联通的光猫和局端支持,以测试通过,ed2k 高 ID
    bibiisme
        17
    bibiisme  
       2019-09-26 13:50:47 +08:00 via Android
    @wheat0r 你用的是移动?电信联通全是 100.64 的,而且就算是移动现在也全是 CGN 了。
    feast
        18
    feast  
    OP
       2019-09-27 01:47:08 +08:00
    @ragnaroks 不错啊,来点截图
    LBL584520
        19
    LBL584520  
       2019-10-06 20:02:25 +08:00 via iPhone
    @feast 感谢回复!
    Windows7 平台下有吗?

    我不会操作 linux,也没有 lunix 平台
    (工具 github.com ¥ libpcp ¥ pcp,MSVC+cmake 编译) ?? ( linux 下 autogen.sh && make 即可)??


    不是学计算机的
    只是对计算机略感兴趣的一个普通人,非专业人士
    feast
        20
    feast  
    OP
       2019-10-06 22:43:57 +08:00 via Android
    @LBL584520 抽空编译了个,依赖 VS2005 运行 imgchr.com/i/ugySun
    LBL584520
        21
    LBL584520  
       2019-10-07 20:52:45 +08:00
    搞了半天 装 vs 2005

    先是
    “无法启动此程序,因为计算机中丢失 MSVCP80.dl 。尝试重新安装该程序以解决此问题"
    然后 网上搜索了下


    ------------------------------------------------------------------

    结果没上面的这个错误,又弹出了另外的

    R6034
    An application has made an attempt to load the C runtime library without using a manifest. This is an unsupported way to load Visual C++ DLLs. You need to modify your application to build with a manifest.
    -----------------------------------------------------------------


    -----------------------------------------------------------------
    看了半天还是
    搞不定!!
    抓狂 ing !!!
    LBL584520
        22
    LBL584520  
       2019-10-07 20:59:05 +08:00
    @feast

    缺少了 manifest,程序因此无法正常载入 C runtime library。
    搜索半天有好多个解决方法
    csdn 里的


    看了半天还是
    搞不定!!
    抓狂 ing !!!
    feast
        23
    feast  
    OP
       2019-10-07 23:10:02 +08:00
    @LBL584520 直接用 VS2005 CMAKE -G Nmake makefile 编译一个就行了
    feast
        24
    feast  
    OP
       2019-10-08 01:13:47 +08:00
    LBL584520
        25
    LBL584520  
       2019-10-08 09:23:04 +08:00
    @feast

    添加进去还是报错
    R6034

    算了,我搞不定,真不是我这种 小白 非专业人士干的......
    feast
        26
    feast  
    OP
       2019-10-08 10:55:36 +08:00
    @LBL584520 imgchr.com/i/uWR4OS 奇怪?????
    LBL584520
        27
    LBL584520  
       2019-10-08 12:52:31 +08:00 via iPhone
    @feast 这下要等我过几天回家来试了,猜测还是可能弹出 什么运行错误的框框。。。


    不知道那种可以随时拷贝到别的机子上 可以直接运行
    的.exe 单文件便携版或者绿色版,或者安装包是怎么做的?

    是不是麻烦的多?
    feast
        28
    feast  
    OP
       2019-10-08 18:39:41 +08:00
    @LBL584520 真 TMD 诡异,这个跟其他用不上的 exe 放一起就直接报 R6034,我怀疑微软 DLL 里面直接用的后缀进行通配判断,极为坑爹
    bibiisme
        29
    bibiisme  
       2019-10-09 13:03:04 +08:00 via Android
    mtk 路由器的 padavan upnp 里有个 nat-pmp&pcp,不知道是不是一个玩意
    feast
        30
    feast  
    OP
       2019-10-09 16:13:42 +08:00
    @bibiisme 就是一个东西,不过 PCP 是运营商级别的,PMP 还要通过 IGD xml 协议进行交互( L3 )无论是性能开销还是安全性( PCP UDP 类 L2 ),都不如
    bibiisme
        31
    bibiisme  
       2019-10-09 17:09:04 +08:00 via Android
    @feast 如果运营商支持 pcp,PADAVAN 开了 pcp 后,路由器下面设备只需要支持普通的 upnp 还是也要配置 pcp ?
    bibiisme
        32
    bibiisme  
       2019-10-09 17:17:36 +08:00 via Android
    @feast 另外我记得 OpenWrt 的路由器也有这选项,应该能刷机的路由器都可以开吧
    feast
        33
    feast  
    OP
       2019-10-09 18:53:04 +08:00
    @bibiisme 你跟 PCP GW 申请端口后,看映射情况,移动居多的对称型 NAT 是 5 元组的,只能开一个主动的端口( PEER ),会在网关开个端口对应到你所给的 IP 端口,这个 IP 应该就是 PCP 请求包的 IP,也就是说如果你有 NAT 路由,可能就是对应到路由获取的 CGN 内网 IP 上的
    feast
        34
    feast  
    OP
       2019-10-09 18:54:27 +08:00
    @bibiisme 目前看这情况,移动就算开了 PCP 说实话也没多少卵用,最大的问题是 PCP 华为是收费的,NAS 能用 IPv6 还是用 v6 吧,毕竟郑智任务
    feast
        35
    feast  
    OP
       2019-10-09 18:55:27 +08:00
    @bibiisme 你要搞清楚 PCP 的 C/S 工作原理,他只是一个辅助端口映射的工具
    lentrody
        36
    lentrody  
       2019-12-21 04:21:21 +08:00
    根本没有 PCP server 和网关,应该就不需要测了吧……
    https://s2.ax1x.com/2019/12/21/QjF6AS.png
    feast
        37
    feast  
    OP
       2020-01-11 15:03:47 +08:00
    @lentrody 大概率显示错误,tracert 跟踪第一跳
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2634 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 11:28 · PVG 19:28 · LAX 03:28 · JFK 06:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.