返回博客列表
配置wsl的系统环境降低cc使用风险

配置wsl的系统环境降低cc使用风险

2026-06-04#claudecode#cc#wsl2#ipv6#ntp#timezone

折腾了好久的牢美住宅ip和本地环境来使用claudecode,网络环境方面的配置之后有空开一期单独写,这里记录一下如何修改wsl中的一些系统环境设置来降低cc的风控风险。

1. 禁用 IPv6

(可选/因为我买的住宅ip的代理不支持ipv6代理,支持的话可以不用) 先查看当前 IPv6 状态:

ip -6 addr

创建 sysctl 配置:

sudo nano /etc/sysctl.d/99-disable-ipv6.conf

写入:

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

应用配置:

sudo sysctl --system

验证:

cat /proc/sys/net/ipv6/conf/all/disable_ipv6
cat /proc/sys/net/ipv6/conf/default/disable_ipv6
cat /proc/sys/net/ipv6/conf/lo/disable_ipv6

如果都返回:

1

说明 IPv6 已禁用。


2. 配置美国时区

WSL 的时区可能会受到 Windows 主系统影响。

最开始我只是创建了一个 systemd 服务,在 WSL 启动时把时区修正一次。但实际使用中发现,WSL 运行一段时间后时区有可能再次被同步或修改,所以后来改成了 systemd timer 定时检查:

  • WSL / systemd 启动 5 秒后第一次检查;
  • 之后每 10 秒检查一次;
  • 如果当前已经是 America/New_York,则什么也不做;
  • 只有发现时区被改掉时,才重新设置为纽约时区。

创建时区修复脚本

sudo nano /usr/local/sbin/fix-wsl-timezone.sh

写入:

#!/bin/sh
set -eu

ZONE="America/New_York"

current_zone="$(timedatectl show --property=Timezone --value 2>/dev/null || true)"
localtime_target="$(readlink -f /etc/localtime 2>/dev/null || true)"

if [ "$current_zone" != "$ZONE" ] ||
   [ "$localtime_target" != "/usr/share/zoneinfo/$ZONE" ]; then
    /usr/bin/timedatectl set-timezone "$ZONE"
fi

添加执行权限:

sudo chmod +x /usr/local/sbin/fix-wsl-timezone.sh

这个脚本不会每次运行都强制写时区,而是先检查 timedatectl 当前时区和 /etc/localtime 的实际指向。只有两者任意一个不正确时,才真正执行:

timedatectl set-timezone America/New_York

创建 systemd 服务

sudo nano /etc/systemd/system/fix-wsl-timezone.service

写入:

[Unit]
Description=Force WSL timezone to America/New_York

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/fix-wsl-timezone.sh

这个 service 本身不会常驻,每次被 timer 触发时只运行一次脚本,然后退出。

创建 systemd timer

sudo nano /etc/systemd/system/fix-wsl-timezone.timer

写入:

[Unit]
Description=Periodically enforce WSL timezone

[Timer]
OnBootSec=5s
OnUnitActiveSec=10s
AccuracySec=1s
Unit=fix-wsl-timezone.service

[Install]
WantedBy=timers.target

其中:

  • OnBootSec=5s:WSL / systemd 启动 5 秒后第一次检查;
  • OnUnitActiveSec=10s:之后每隔 10 秒检查一次;
  • AccuracySec=1s:允许约 1 秒的调度误差;
  • Unit=fix-wsl-timezone.service:每次触发时执行前面的 oneshot service。

启用 timer

重新加载 systemd:

sudo systemctl daemon-reload

启用并立即启动 timer:

sudo systemctl enable --now fix-wsl-timezone.timer

注意这里启用的是 fix-wsl-timezone.timer,而不是 oneshot service。

查看状态:

systemctl status fix-wsl-timezone.timer

正常情况下应该能看到类似:

Loaded: loaded (...; enabled)
Active: active (waiting)
Triggers: fix-wsl-timezone.service

也可以查看下一次触发时间:

systemctl list-timers | grep fix-wsl

如果刚修改完配置,想立即切换到纽约时区,可以手动执行一次:

sudo /usr/local/sbin/fix-wsl-timezone.sh

然后验证:

timedatectl
date

夏令时期间应该类似:

Time zone: America/New_York (EDT, -0400)

冬令时会自动切换为:

America/New_York (EST, -0500)

因此不要直接写死 UTC 偏移,使用 America/New_York 可以让系统自动处理夏令时。

如果想测试自动修复是否生效,也可以故意把时区改成其他地方:

sudo timedatectl set-timezone Asia/Shanghai

等待十几秒后再次执行:

timedatectl

如果 timer 正常工作,时区应该会自动恢复成:

America/New_York

3. 配置 NTP 时间同步源

推荐使用通用/美国环境更自然的 NTP:

time.cloudflare.com
time.google.com
pool.ntp.org

编辑 systemd-timesyncd 配置:

sudo nano /etc/systemd/timesyncd.conf

写入或修改为:

[Time]
NTP=time.cloudflare.com time.google.com pool.ntp.org
FallbackNTP=time.cloudflare.com time.google.com

重启时间同步服务:

sudo systemctl restart systemd-timesyncd

查看同步状态:

timedatectl

如果系统支持,也可以查看详细状态:

timedatectl timesync-status

如果看到仍然在访问中国 NTP,例如:

ntp1.aliyun.com
cn.ntp.org.cn

说明可能还有其他时间同步服务,例如 chrony。

检查 chrony:

systemctl status chrony

如果正在运行,编辑:

sudo nano /etc/chrony/chrony.conf

注释掉中国 NTP,添加:

server time.cloudflare.com iburst
server time.google.com iburst
pool pool.ntp.org iburst

重启 chrony:

sudo systemctl restart chrony

查看:

chronyc sources -v