翻墙那些事

记录一下解决网络问题合集,网络基本环境为 iKuai + OpenWRT,网关互指,移动宽带

墙中墙

运营商劫持 dns 也不是什么新鲜事,早年tls加密请求没有普及的时候,一个小地方就能靠劫持插广告一年搞几千万,还上演上下级狗咬狗的戏码。而如今宽带新贵移动搞这玩意可能更多是为了节约跨网流量,把用户dns弄得一团糟,被称为墙中墙。

遇到过最坑的事情,它把dns请求劫持了,但它的服务器不知道什么故障乱返回或没有返回,但这排查了很久才发现的,一般上不了网,肯定先怀疑路由器、网线、光纤什么的,搞半天发现ssh这种直连ip的没有半点影响,才一点一点确定dns劫持问题。

明确要解决的问题 ,让dns最起码要正确响应gfw列表外的请求。

这并不难,国内阿里、腾讯都有免费的加密dns服务,OpenWRT 装个 AdGuard Home 或 smartdns即可。

以 AdGuard Home 举例

上游 DNS

1
2
3
4
5
6
tls://dns.alidns.com
tls://dot.pub
https://dns.alidns.com/dns-query
https://223.5.5.5/dns-query
https://223.6.6.6/dns-query
https://doh.pub/dns-query

Bootstrap DNS

1
2
tls://223.5.5.5
tls://223.6.6.6

再把它设置为 dnsmasq 的上游,基本国内的网络可以畅游了

过墙的 DNS

这估计是很多小白的第一个大坑,搞什么双dns,国内一个,国外一个。

首先要知道的是,大厂的站点 DNS 会返回离请求ip最近的结果,在你本地搞个所谓的国外专用dns,获得的是离你最近而不是你的翻墙节点机器最近的。

以 passwall 为例,较新版本的luci页面应该是没地方让你瞎搞了,gfw列表的dns请求肯定走翻墙节点,但现在比较流行的模式是“中国列表意外”(绕中国IP之类的叫法),也就是中国ip以外的都走代理。这就有个问题,不在gfw列表也不在中国列表的这些域名的dns应该走哪呢?这些域名的ip有可能是国内的也有可能是国外的,也有可能做了全球cdn。passwall 让用户自己选择,但鉴于国内的环境我建议这里也走代理。

123

IPv6

来到重头戏 IPv6,直到用上IPv6,我才有用上“互联网”的感觉,所以即使它让翻墙麻烦了很多,也不会放弃使用。

如果你的翻墙节点不支持 IPv6,把 passwall “过滤代理域名”勾选上,但总有漏网之鱼,比如此时用命令行装一些依赖就非常慢,访问的就是不走代理的国外IPv6,这里的方法应该是想办法过滤掉这些域名的IPv6,但我的节点支持IPv6,所以没有继续探讨

如果你的翻墙节点支持IPv6,这时候的代理有两种情况,第一种ipv4->ipv6->ipv4,也就是ipv4的请求通过ipv6的代理到翻墙服务器,再发出原始的ipv4请求,第二种全程ipv6。第一种情况应该不会出问题,但第二种在 ikuai + openwrt 这种网络里特别容易出问题。

针对全程 IPv6 的代理,还是以 passwall 为例,在高级设置里打开 IPv6透明代理,这样 passwall 就能代理 ipv6 的流量了。

截屏2023-05-31 19.17.24

ikuai虽然与openwrt网关互指,但那是ipv4,所有设备的ipv6流量还是直接走ikuai出去,不经过openwrt,所以 passwall 还是无法接收 ipv6 流量。

把 openwrt 的lan的dhcpv6设置成如下,通告的dns服务器为openwrt的本地ipv6,在ikuai的ipv6选项可查看,并编辑/etc/config/dhcp,在lan口配置中加一行 option ra_preference 'high' 。注意,前提是已经设置了lan6

截屏2023-05-31 19.07.02

至此,代理基本完善