第 2 页 - kernel panic - 快来吧奔腾电脑,就让它们代替我来思考

无网条件下同步时间

这多少有点标题党了,指的是没有因特网或者UDP被阻断的情况下同步时间。
因为大多数HTTPS协议要用到TLS,时间差异太大会握手失败(timestamp is error),校园网在没登录时不能连接到NTP服务器同步时间,导致树莓派上很多服务'会谢'(entered failed state),经过摸索想到用Http中的字段来同步时间。


查看全文 »

Python3 async异步协程

大概因为这域名集齐了几大诈骗网址的特征:在香港不用备案,域名里有gov,结尾org,来来回回封锁-手动解封几次了…所以完整版本如果要看的话去浏览器开吧。

想起刚入坑编程的时候,都是些if-else,即使是分支结构,也始终在一条线上运行。后来知道了线程(池),甚至在没学过死锁的情况下自己实现了线程安全的操作,虽然那时还不知道这些术语,现在才知这道操作叫做’互斥锁’。



查看全文 »

通过MTR来判断国外VPS到大陆网络的质量

以前我也谈过,国内带宽成本基本上由内容提供方付费,自建机房的直接向运营商买带宽,没有的向阿里云这类买服务器,价格不是一般贵,这也就是百来块钱一个月的国内服务器带宽就给个10Mbps。国外带宽成本大多由宽带用户付费,一个月的宽带上网费是很贵,而国外服务器大都给很大的带宽,稍微便宜一点的也基本上共享G口起步。
有一种想法是买国外服务器給国内用,最初我也这样想,直到买的服务器很慢很卡,意识到发生了丢包,之前提到过与运营商有关,这次讲下怎么直观感受线路质量。


查看全文 »

透明代理探索之TProxy

去年我写过一篇文,大概是用NAT的方式将树莓派作为无墙网关
REDIRECT方式转发数据给V2Ray
事实上这种方式通俗易懂,但是不能够支持UDP流量,这是因为这种方式拿不到UDP的目的地址,所以参考官方手册加之实践整理出如下原因,并简要学习TProxy的配置方法。

REDIRECT不支持UDP流量的原因

在配置过程中,有这样一条命令:

iptables -A V2RAY -s 192.168.2.0/24 -p tcp -j REDIRECT --to-ports 8081

一个流入本机的数据包,原地址匹配到了192.168.2.0/24,则包头的目标地址被改成本机(其实所谓REDIRECT可以被认为是特殊的DNAT),那么它的目标地址改了,V2Ray怎么知道它原先的目的地址呢?
实际上,套接字提供了一个选项SO_ORIGINAL_DST,netfilter会把原始目的地址放在套接字的SO_ORIGINAL_DST属性里面,那么就可以很轻松的拿到原目的地址做转发了。
而 UDP 不是面向连接的,因此从 socket 里拿不到目的地址。

TProxy简介

简要说就是它不像REDIRECT一样会改变包头的目的地址,且支持UDP TCP。我个人理解就是通过调整本地路由和对数据包做标记来实现引流到代理软件的,具体可以去看各大佬的介绍吧

配置TProxy

在官方文档新 V2Ray 白话文指南中,作者给出了样例代码
但并未对各个命令做详细的解释,我将按我的理解梳理一遍,时间关系仅分析代理局域网部分。

# 设置策略路由
ip rule add fwmark 1 table 100 
ip route add local 0.0.0.0/0 dev lo table 100
  1. 对带有标记为1的数据,使用路由表100。
  2. 路由表100中,所有的地址均为 local。
# 代理局域网设备
iptables -t mangle -N V2RAY
iptables -t mangle -A V2RAY -d 127.0.0.1/32 -j RETURN
iptables -t mangle -A V2RAY -d 224.0.0.0/4 -j RETURN 
iptables -t mangle -A V2RAY -d 255.255.255.255/32 -j RETURN 
iptables -t mangle -A V2RAY -d 192.168.0.0/16 -p tcp -j RETURN # 直连局域网,避免 V2Ray 无法启动时无法连网关的 SSH,如果你配置的是其他网段(如 10.x.x.x 等),则修改成自己的
iptables -t mangle -A V2RAY -d 192.168.0.0/16 -p udp ! --dport 53 -j RETURN # 直连局域网,53 端口除外(因为要使用 V2Ray 的 DNS)
iptables -t mangle -A V2RAY -j RETURN -m mark --mark 0xff    # 直连 SO_MARK 为 0xff 的流量(0xff 是 16 进制数,数值上等同与上面V2Ray 配置的 255),此规则目的是解决v2ray占用大量CPU(https://github.com/v2ray/v2ray-core/issues/2621)
iptables -t mangle -A V2RAY -p udp -j TPROXY --on-ip 127.0.0.1 --on-port 12345 --tproxy-mark 1 # 给 UDP 打标记 1,转发至 12345 端口
iptables -t mangle -A V2RAY -p tcp -j TPROXY --on-ip 127.0.0.1 --on-port 12345 --tproxy-mark 1 # 给 TCP 打标记 1,转发至 12345 端口
iptables -t mangle -A PREROUTING -j V2RAY # 应用规则

代理局域网设备做了几件事:

  1. 将几个特殊地址返回,不经由V2Ray处理
  2. 对于来自局域网的地址也返回,不经由V2Ray处理
  3. 将UDP 53端口的DNS流量引入V2Ray
  4. 带有255标记的数据包,不再经由V2Ray处理,因为已经处理过了
  5. 将UDP和TCP流量打上标记1后引入V2Ray

V2Ray配置文件的要点

  1. Dokodemo-door 是用来接收透明代理的入站协议,followRedirect 项须为 true 以及 sockopt.tproxy 项须为 tproxy,建议开启 snifing,否则路由无法匹配域名;
  2. 在 dokodemo inbound 和所有的 outbound 加一个 255 的 mark,这个 mark 与下文 iptables 命令中 iptables -t mangle -A V2RAY_MASK -j RETURN -m mark --mark 0xff 配合,以直连 V2Ray 发出的流量。
    具体配置建议参考官方手册。

效果

配置完成后的iptables条目:
QQ截图20220127195656.png
V2Ray运行日志:可以看到流量类型分为[dns-out]、[proxy]、[direct]三类,这是因为开启了snifing
QQ截图20220127195556.png
简要测速
测速
落地服务器在日本东京,直连测速在80Mbps左右