分类目录归档:技术

彻底解决阿里云和 tailscale 冲突

如果你在一台阿里云服务器安装并启动了 tailscale,大概率会出现阿里云服务器无法上网的问题,根本原因为阿里云服务器默认DNS与tailscale网段产生冲突。

由于阿里云和 tailscale 都使用了 100.64.0.0/10 这个网段。100.64.0.0/10RFC 6598 中被保留为 运营商级 NAT (Carrier-Grade NAT) 地址段,用于 ISP 做 NAT 时避免与内网冲突。Tailscale 把它当成“只允许来自 Tailscale 接口的地址段”是符合规范的。但阿里云在 VPC 内把 100.100.2.136100.100.2.138 作为内网 DNS 服务地址,初衷是: 地址在公网不可路由,避免外泄; 与经典网络互通时不会冲突。

由于动机不同,目标不同,造成二者冲突。

目前比较流行的方法,是关闭 tailscale 的 iptables 规则生成,但这是不安全的。浏览各种解决方案后我认为脚本轮询的方案最可靠。

脚本轮训解决

/usr/local/bin/fix-ts-dns.sh

#!/bin/bash
while true; do
  if ! iptables -C ts-input -s 100.100.2.136/32 -j ACCEPT 2>/dev/null; then
    iptables -I ts-input 1 -s 100.100.2.136/32 -j ACCEPT
  fi
  sleep 30
done

/etc/systemd/system/fix-ts-dns.service

[Unit]
Description=Keep Aliyun DNS whitelist in Tailscale chain
After=tailscaled.service

[Service]
Type=simple
ExecStart=/usr/local/bin/fix-ts-dns.sh
Restart=always

[Install]
WantedBy=multi-user.target
chmod +x /usr/local/bin/fix-ts-dns.sh
systemctl enable --now fix-ts-dns.service

脚本轮询,检查到存在 tailscale 的规则表且不存在白名单时,自动插入一条放通阿里云网段的规则。

解决方案来源:https://www.xugj520.cn/archives/aliyun-cgnat-tailscale-conflict.html

Refs

macOS 单独为鼠标或触控板开启自然滚动

macOS 系统配置“自然滚动”,虽然鼠标和触控板都可以配置,但是两个控制是同步的,更改任意一个另一个都会跟着动。

一直是这样,也没有要更改的意思。

使用 LinearMouse 这个软件可以实现单独为触控板开启自然滚动,鼠标不开启自然滚动。

对于我来说,操作自然多了。简单记录一下。

Refs

go 拉取 gitcode.com 私有 mod

TL;DR

某个项目 mod 托管在 gitcode,无法拉取。git 登陆也不行,需要配置 git 针对 gitcode 默认走 ssh 协议:

git config --global url."ssh://git@gitcode.com".insteadOf "https://gitcode.com"

在网上查到比较多的是针对 gitlabgithub 的:

# gitlab
git config --global url."ssh://git@gitlab-company".insteadOf "https://gitlab.xxx.cn"

# github的同理
git config --global url."ssh://git@github-company".insteadOf "https://github.com"

配置后就可以正常 go mod tidy 了。

Refs

SSH 通过跳板机连接

TL;DR

有两种方式可以实现通过跳板机直接连接目标服务器 SSH.

# ProxyJump(推荐方式)OpenSSH >= 7.3
ssh -J user@jump-server.dealiaxy.com:10023 user@target.dealiaxy.com
# 在这条命令中,-J 后面指定了跳板机的地址(user@jump-server.dealiaxy.com)和端口(10023)。SSH 会先与跳板机建立连接,然后通过跳板机转发流量到目标服务器 target.dealiaxy.com。整个过程只需要一次登录操作,极大简化了访问流程。
# ProxyCommand
ssh -o "ProxyCommand ssh -W %h:%p user@jump-server.dealiaxy.com -p 10023" user@target.dealiaxy.com
# 在这个命令中,-o "ProxyCommand" 选项指定了一个自定义的命令来通过跳板机进行连接。具体地,ssh -W %h:%p 会将目标主机(%h)和端口(%p)转发给跳板机,然后通过跳板机建立与目标主机的连接。

Refs

lxc 使用 chronyc 构建 ntp 服务

lxc 启动 chronyd 是无法直接启动的,因为用到了很多未授权的权限。

TL;DR

lxc与宿主机共用内核,因此时间也是共用的,无需同步。如果你想构建一个 ntp 服务,不需要同步时间,可以像下面这样做:

$ sudo systemctl edit chrony
# 新增以下内容:
[Service]
User=
Group=
ExecStart=
ExecStart=/usr/sbin/chronyd -F 1 -x

这些配置会覆写默认的 chrony 后台服务参数,启动 chronyd 时加 -x,禁用步进/微调系统时钟,这样即使没有 CAP_SYS_TIME 也能跑起来。 上面两行 UserGroup 这样 chronyd 会以 root 启动,然后按照 /etc/chrony/chrony.conf 里的 user chrony 自动降权运行,这是官方推荐方式。

这样配置后 chrony 的服务就可以启动了,可以对外发布 ntp 服务。

Refs

整理了一个 AI 提示词库

大模型的能力越来越强,但是如何发挥大模型真正的实力?

这是我一直在思考的问题,在平常的使用过程中很容易发现,提示词的使用技巧对于生成结果的质量至关重要。多看看优秀的提示词,还能启发我们利用大模型的更多用法。

在网上看到许多优秀的提示词仓库,但一般都是针对某个模型或场景的,一直想整理一个更方便易读,根据模态、模型分类,从各处搜集优秀的提示词汇集到一处的仓库。

于是最近制作了这个网站:https://prmbr.com/

一个精选提示词库,包括 Text-To-Text, Text-To-Image, Text-To-Video 等提示词用法,还有针对 Nano Banana GPT-Image-1 等模型的专门分区,内容全部来自于各大开源的 Prompt 仓库、社交媒体、网站,以及我在各种地方偶然看到的内容。

初期内容还比较有限,后期逐渐完善,分享给大家。

代码仓库已经开源,可以参与共建:https://github.com/songtianlun/awesome-prompts

让 LLM 看到真实世界的 Playwright MCP

Playwright MCP 是一个模型上下文协议(MCP)服务器,使用 Playwright 提供浏览器自动化功能。该服务器使 LLM 能够通过结构化的可访问性快照与网页交互,从而绕过对屏幕截图或视觉调整模型的需求。

使用方法

以 codex 为例,创建或编辑配置文件 ~/.codex/config.toml 并添加:

[mcp_servers.playwright]
command = "npx"
args = ["@playwright/mcp@latest"]

References

磁盘占用分析利器 ncdu

现在使用 ncdu 的话,只需要执行一次就可以查询目录大小并排序,且删除文件也很方便,不会出错。

基本用法

安装:

# ubuntu
sudo apt install ncdu
# centos
sudo yum install ncdu
# macOS
brew install ncdu

使用

# 统计当前所在目录及子目录的文件占用情况
ncdu

# 统计指定的 /data 目录
ncdu /data

# 将 /data 目录的情况输出到 ~/ncdu.txt
ncdu /data -o ~/ncdu.txt

# 加载本地根据,而不是进行实时统计
ncdu -f ~/ncdu.txt 

References