🌐OpenWRT配置宽带拨号AC指定Bras避免CGNAT

2024-12-13|2025-1-6
Yawatasensei
Yawatasensei
type
status
date
slug
summary
tags
category
icon
password
😀
前阵子因为CGNAT的问题和电信运营商斗智斗勇,也查询了不少相关的资料,算是又学了一些关于宽带的相关知识。事情的起因是因为我被电信分配了一个100.x.x.x 的CGNAT地址,也就是大内网地址,NAT等级为端口限制,基本上PT使用不了,玩一些需要P2P联机的游戏也不太行。后面找了一下资料,现在运营商基本上都是从Bras切换为vBras,切换到vBras之后,基本上都是给的CGNAT地址。那么既然知道了怎么回事,就把这次折腾通过配置Access Concentrator切换回原来运营商的Bras,恢复原有IPv4的NAT等级,甚至部分地区还可能通过这种方式获取到动态公网的IPv4地址。
 

📝 基础知识部分

什么是AC(Access Concentrator)?

在目前国内的互联网环境下,大部分宽带都是通过PPPoE协议作为个人用户提供的宽带接入方式,也就是我们所常说的PPPoE拨号。PPPoE是在以太网上承载PPP协议(点到点连接协议),通过一个宽带接入服务器(roadband Remote Access Server,也有称为Access Concentrator的情况),也就是Bras接入互联网,这一般是由当地的宽带接入运营商提供,例如联通、电信、移动或者广电等等。简单点理解来说,你可以理解宽带接入服务器(roadband Remote Access Server),也就是AC,或者说Bras是一个在你光猫上级,在所在区域的一个大型路由器,提供分配接入互联网的IP地址分配。有条件的地区呢,在原有Bras的情况下,会分配一个动态的公网IP地址(IPv4和IPv6),也有的地区,会提供一个内网的IP地址,例如172开头的中等规模网络私有地址,但是一般来说不会使用100开头的CGNAT地址。
目前国内的AC基本分为两种,Bras和vBras。

什么是CGNAT?

CGNAT(Carrier-Grade Network Address Translation),也称为大型运营商级网络地址转换,用于应对IPv4地址枯竭的问题,也就是没有可分配的动态公网IPv4地址的问题。通过允许互联网服务提供商(ISPs)通过让多个用户共享一个公共IP地址来最大化地利用有限的IPv4地址资源。我了解到CGNAT这种技术还是在被分配到100网段之后,发现Tailscale的exit node(出口节点)的路由出现了问题,通过Google才知道有这么个概念。
CGNAT这种技术,对于运营商好处多多,通过少量的公共IPv4地址即可接入更多的宽带用户,推迟完全转换到IPv6的需求,可以处理更多并发连接,更易于对用户进行管控等等。但是对于个人用户来说,使用上存在诸多不便,例如:
  • 端口限制:由于共享IP地址,用户可用的端口数量有限,可能影响某些应用程序的性能。
  • 复杂的故障排除:CGNAT增加了网络层的复杂性,使得问题排查更困难。
  • 影响某些服务:某些需要直接IP地址映射的服务(如P2P、在线游戏、VoIP等)可能受到影响。
那么同样是分配的局域网IPv4地址,为什么原来不会出现这种问题?其实相对于上面提到172开头的中等规模网络私有地址,CGNAT接入的网络用户数量更多,相当于更多人公用一个IPv4地址,而每个地址的端口数量就只有65535个,举例来说,10个人共享一个端口和100个人共享一个端口难度是不一样的。

什么影响到接入CGNAT?

在上面AC部分我们说到所有的PPPoE拨号都是通过Bras,就也是宽带接入服务器(AC)进行接入认证、授权及计费,同时Bras一般也负责用户流量的初步路由。在目前国内的运营商网络架构中,一般地址分配被集成在Bras设备中,简化网络架构和管理。原有的Bras目前正在被逐步替换为vBras,在国内运营商这里来说是一个趋势,减少运营成本,而通过vBras所分配的,大部分均为CGNAT地址。因为是逐步进行的替换,所以在大部分区域,目前还是Bras和vBras并行的状态,这也是我们这篇文章的核心部分,通过指定AC Name的方式,接入原有的Bras,降低CGNAT对我们网络的影响。

📝 OpenWRT操作部分

这部分操作的前提是OpenWRT为你的主路由,通过桥接模式与光猫进行连接,也就是OpenWRT作为你的拨号路由器。旁路由方式无法获取到AC名称。

安装pppoe-discovery

基本上目前所有的软件仓库都有pppoe-discovery这个软件,这个软件主要用于通过与上游接口进行通信的方式,获取到上游可使用的Bras AC Name,从而提供给OpenWRT的pppd程序使用,决定拨号后接入的Bras。

安装方法

查找上游AC

我这里wan接口是eth0,所以下面的代码中使用的是eth0。如果你的wan接口是别的名字,需要替换为自己的接口的名称。
返回结果大概类似于以下这样,Bras和vBras基本上都显示在AC Name中,我们需要复制Bras的AC Name,等下要用在拨号设置部分。如果你所在的城市通过pppoe-discovery只能查找到一个结果,那么本篇内容可能就对你的情况没有太多帮助了。

配置PPPoE拨号

打开你原有的PPPoE配置界面,在接入集中器部分粘贴刚刚复制的AC Name,然后保存,OpenWRT会自动进行重新拨号。
notion image
如果需要代码配置的话,在/etc/config/network 中,找到interface wan口名称 部分,添加如下内容:

🤗 总结归纳

一般来说,切换回旧的Bras之后,至少能一定程度的缓解NAT问题带来的困扰,即便还是分配的内网IP地址,但至少NAT应该是全锥型,不会影响到BT下载以及P2P联机游戏等。当然我在切换之后居然获得了意外之喜,原有的Bras居然直接分配了一个动态公网的IPv4地址给我。
最近也没有认真的写东西,也没有去研究乱七八糟的,完全在沉迷流放之路2。

📎 参考文章

 
💡
有关OpenWRT安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
流放之路2读图卡死解决方案Android跳广告神器:李跳跳2.4使用指南
Loading...