中国关于Telegram的IP封锁
Telegram在2015年7月被中国封锁。以下是关键时间点:
- 7月10日Telegram报告其服务收到来自东亚的DDoS攻击。
- 7月11日GreatFire.org网站出现被封锁的测试记录。
- 7月12日腥滑射妓者“邹伟”和人民日爆妓者“黄庆畅”发文章称:
‘电报’主要用于组织串联,里面的言论基本都是攻击党和政府的。(维权律师)在里面策划、组织各种声援活动,可以设定时间删除图片和文字,就是不想让政府知道。…“访民”刘星交代了通过“电报”等方式与翟岩民联系的情况,并承认翟岩民给他介绍了很多律师朋友。
考虑到,中国曾在该年3月使用其“大炮”(Great Canon)给百度注入恶意JavaScript代码、攻击GreatFire.org和GitHub网站,7月的来自东亚的攻击也非他莫属。不过,GitHub并没有因此移除或者阻止中国人看到任何内容,包括是恶意脚本中的两个目标;Telegram也没有这么做。
Telegram从被中国封锁的时候,就没有使用标准的HTTP(S)来通信。而是使用名为MTProto的自制加密协议,直接与内置的IP地址通信,没有DNS解析的过程。因此,GFW的DPI和注入器毫无办法,只有封锁其IP地址。
本文将介绍Telegram服务器的IP被中国封锁的情况。由于其IPv6地址空间十分庞大,仅考虑IPv4地址的封锁。
方法
在以下二位置运行扫描程序gscan_quic。
- AS35916 VPS, located in United States
- Home network, AS4837 China Unicom
已知后者受GFW封锁影响。
关键配置为:
{
"ScanWorker": 64,
"ScanMode": "Ping",
"VerifyPing": true,
"ScanMinPingRTT": 1,
"ScanMaxPingRTT": 3000,
"Ping": {
"ScanMinRTT": 1,
"ScanMaxRTT": 3000,
"InputFile": "iprange/iprange_as44907.txt",
"OutputFile": "out_as44907.txt",
"RecordLimit": 114514
}
}
手动为AS切换配置,然后比较二者的扫描结果。
Telegram的IP地址列表
Telegram在其代码库中将数据中心按照数字命名,类似DC1、DC2、DC3…分别位于不同的地理位置。不过,本文使用Hurricane Electric的BGP Toolkit查找到5个名为Telegram的自治系统(Autonomous system)。
Table
扫描结果如下:
AS | DC / location | range blocked | blocked / available |
---|---|---|---|
44907 | India, Asia | N/A | 0% |
59930 | Miami, United States | 149.154.175.10/24 | 50.0% |
62014 | Singapore | 149.154.171.116/24 91.108.56.100/24 | 47.4% |
62041 | Amsterdam, Europe | 149.154.167.1/24 91.108.56.100/24 | 13.0% |
211157 | Europe | N/A | 0% |
AS
这些AS和DC(数据中心)并非一一对应的。
AS44907
奇怪的AS,没有任何域名出现在上面。地理位置从IPv4上游来看有可能是印度,但是 IPinfo.io 和纯真数据库里都在阿塞拜疆。
AS名称是Telegram Messenger CDN。
没有观察到任何屏蔽。
AS59930 DC1 & DC3
DC1位于美国迈阿密,美洲地区号码的用户数据在此。DC3几乎没有被任何号码使用。
推测的屏蔽规则:
- 149.154.175.10/24
AS62014 DC5
位于新加坡的数据中心。在Telegram的5个AS中只有它有此处的Prefix。中国人使用+86手机号码注册,连接的是此处的IP地址。
推测的屏蔽规则:
- 149.154.171.116/24
- 91.108.56.100/24
AS62041 DC2 & DC4
位于荷兰阿姆斯特丹。俄罗斯和欧洲的手机号码所区分的用户数据分别在DC2和DC4。看起来是这几个AS里面Prefix最多的。部分Prefix和AS62014重合。
屏蔽规则:
- 149.154.167.1/24
- 91.108.56.100/24
AS211157
同样未对用户启用的AS,地理位置在欧洲。AS名称是Telegram-AS。
没有观察到任何屏蔽。
IP
各个DC的IP地址从tdlib里面找是最可靠的,不过为了方便我将复制一段mtprotoproxy.py 的内容:
TG_DATACENTERS_V4 = [
"149.154.175.50", "149.154.167.51", "149.154.175.100",
"149.154.167.91", "149.154.171.5"
]
TG_DATACENTERS_V6 = [
"2001:b28:f23d:f001::a", "2001:67c:04e8:f002::a", "2001:b28:f23d:f003::a",
"2001:67c:04e8:f004::a", "2001:b28:f23f:f005::a"
]
# This list will be updated in the runtime
TG_MIDDLE_PROXIES_V4 = {
1: [("149.154.175.50", 8888)], -1: [("149.154.175.50", 8888)],
2: [("149.154.161.144", 8888)], -2: [("149.154.161.144", 8888)],
3: [("149.154.175.100", 8888)], -3: [("149.154.175.100", 8888)],
4: [("91.108.4.136", 8888)], -4: [("149.154.165.109", 8888)],
5: [("91.108.56.181", 8888)], -5: [("91.108.56.181", 8888)]
}
TG_MIDDLE_PROXIES_V6 = {
1: [("2001:b28:f23d:f001::d", 8888)], -1: [("2001:b28:f23d:f001::d", 8888)],
2: [("2001:67c:04e8:f002::d", 80)], -2: [("2001:67c:04e8:f002::d", 80)],
3: [("2001:b28:f23d:f003::d", 8888)], -3: [("2001:b28:f23d:f003::d", 8888)],
4: [("2001:67c:04e8:f004::d", 8888)], -4: [("2001:67c:04e8:f004::d", 8888)],
5: [("2001:b28:f23f:f005::d", 8888)], -5: [("2001:67c:04e8:f004::d", 8888)]
}
其中的middle proxy看起来是给添加了ADTag的MTProxy服务器使用的。
这其中所有data center的IP地址已经被封锁,如AS章节所述。而middle proxy则只有2和5被封锁。不过申请ADTag的@MTProxyBot不会回应特定账户的要求,而是回复一行通用的错误信息和随机生成的错误代码。本人所有的账户都无法申请。
Repository: https://codeberg.org/antigng/TelegramIPBlockinginChina