WireGuard wg-quick PostUp的高级玩法

真的很高级。 wg-quick是WireGuard用来启动网络设备的**脚本**。 注意了,迄今为止,wg-quick是用bash写的一个脚本,不知道未来会不会变,至少目前shebang是

Incoming search terms:wireguard高级wireguard ipv6wireguard postupexcepts9hpond965partymdsincludecakhillzqqgroundr3mgreatlyzzhgarageai84U5B点对多点wireguardconversationb3lcomposedfjachosenem5cardrrubirthdaygz9beyondxdearticlerrqLink to this post!

SNIProxy Bind Outgoing Interface

这篇纯技术,没兴趣的别看。 关于需求 最早试图用路由器自带的功能去实现sni检测+自动路由,结果发现edgerouter的dpi没开放太多资料。 再又试图用squid去实现正向代理,绑定上行网络地址或者设备,虽然edgerouter自带squid以实现transparent proxy,但是自带版本SNI检测不支持(新版不知),绑定upstream的地址或者设备也没看到有人说支持。 又考虑过haproxy,但是这个必须自己写backend(似乎可以haproxy + squid,没去实践过,至少haproxy的acl要写好长;而且这个组合里haproxy都可以直接被跳过,反正有DNAT也有DNS劫持)。 从上边的方案思考过程,我觉得应该能看懂我想要什么。 关于实现 选用sniproxy,也算偶然。虽然之前vps上实验sni检测+代理的时候,大概看了眼(但是最后还是选了haproxy)。不过最后选这个的重要原因就是好改 XD 官方github在https://github.com/dlundquist/sniproxy。 先考虑的方案是,通过socket上联时绑定客户端IP。 本身支持上行设置请求的源地址,大致实现代码在 connection.c:

但是经过试验,配置source address后,数据包还是会根据路由上的路由表跳到域名解析IP该走的那个网络。 所以,这个方案是不满足我的要求的。 如果绑定IP不行,那就试试绑定设备。 绑定IP的方案的可行性,很早以前跟同学Windows下讨论一个客户端设计的时候验证过;但是绑定设备的,完全没搞过。 现查。 然后查到了 SO_BINDTODEVICE。 SO_BINDTODEVICE Bind this socket to a particular device like “eth0”, as specified in the passed interface name. If the name is an empty string or the option length is zero, … Continue reading “SNIProxy Bind Outgoing Interface”

自建 6in4 Tunnel Server (iproute2)

IPv4下连IPv6有无数种解决方案,传统的6to4, 6in4, TEREDO…没兴趣讲优缺点,可以在wikipedia的页面上看看各家都用了啥。 TunnelBroker.net 应该是没IPv6的地方最流行的上IPv6的解决方案了。 如果你觉得它不爽,其实自己搞一个也没那么难。 上边wikipedia页面里说HE的技术实现是Unknown。其实自己试过一次大概都能知道应该往哪个方向去研究它的技术实现了。 贴一个我路由器上的IPv6 Tunnel信息。

首先,UBNT给我创建的interface是tun0;其次 Link encapsulation 是 IPv6-in-IPv4,也就是传说中的 6in4;再往下看,POINTOPOINT。 再加上TunnelBroker的Example Configurations里给了一个iproute2的配置方法:

思路很简单了。 假设服务器端为S,用户路由为R,则两边的参数逻辑应该是: S: Remote: R.ipv4 Local: S.ipv4 V6 IP: S.ipv6 Route: v6子网/CIDR R: Remote: S.ipv4 Local: R.ipv4 V6 IP: R.ipv6 Route: ::/0 即默认路由 具体来说,假设你S的IP为1.1.1.1,可支配的IPv6 pool为 2400:1234:5678:9abc::/64,R的IP为2.2.2.2,上述的配置可能是: S.ipv4 = 1.1.1.1 S.ipv6 = 2400:1234:5678:9abc:1000::1/80 v6子网/CIDR = 2400:1234:5678:9abc:2000::/80 R.ipv4 … Continue reading “自建 6in4 Tunnel Server (iproute2)”

TunnelBroker for EdgeRouter Lite

创建隧道 在北京联通这种不给IPv6网络的ISP下生存,总有走v6翻墙的欲望。 免费的Tunnel服务很多,最出名莫过HE.net的TunnelBroker 首先申请一个Tunnel。 访问:

注册登录之后,创建并输入当前路由公网IP “YOUR.ROUTER.INTERNET.IP”。 创建成功后会被跳转到

XXXXX的部分是一串数字,所谓的Tunnel ID. 在这个页面上选择第二个标签页 “Example Configurations” 选择 “Vyatta / Ubiquiti EdgeMAX” 文本框会自动生成如下配置:

remote-ip是创建时选择的远端服务器IP,local-ip是本地当前的出口IP。 鉴于ISP给的IP都是动态的,所以local-ip改成如下‘0.0.0.0’。 如果之前有配置过tunnel,需要重新配置,则先删除既有的:

下面开始命令配置tunnel

Router Advert 配置完tunnel,就得配局域网内的配置了,毕竟只有路由能上v6是不够的

如果你本地的DNS规则有过配置,radvd-options 的配置一定要把ipv6地址设成路由器的v6地址 实践证明,我之前折腾了好久的dhcpv6没用,但是配置也可以贴出来

自动更新IP 之前一片EdgeRouter Lite相关的配置文章里,我把He.net提供的DDNS配置好了。Dynamic DNS on HE.net, HE.net Dynamic DNS on Ubiquiti Router. 脚本更新 首先按如下路径生成ddns专用的key

尝试过好多次,EdgeRouter Lite无法通过配置参数添加多个同类型的ddns配置。所以先提供一个简单粗暴的方法。 参考 https://forums.he.net/index.php?topic=1994.0 的说明,有如下的客户端语法: … Continue reading “TunnelBroker for EdgeRouter Lite”

Nginx 反向代理 过滤Cookie

一个项目需求需要过滤HTTP头中的特定cookie项目。 代理使用nginx搭建,编译参数如下:

其中用到了两个插件: https://github.com/simpl/ngx_devel_kit https://github.com/openresty/lua-nginx-module 参考示例:

参考过滤脚本:

测试用例

Incoming search terms:nginx lua filterLink to this post!