配置wsl的系统环境降低cc使用风险
折腾了好久的牢美住宅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
