1. 环境假设 (请根据实际情况替换)
- Ubuntu (网关) IP:
192.168.90.17(你的局域网 IP) - Quest 3 (头显) IP:
192.168.90.200(即将设置的静态 IP) - SOCKS5 代理:
192.168.90.17:6666(你的代理地址) - 虚拟接口 IP:
10.0.0.1(tun2socks 内部使用的 IP,不要改) - 物理网卡名:
ens34(根据ip a确认,如果不确定可用sysctl -w net.ipv4.conf.all.rp_filter=0覆盖所有)
2. Ubuntu 服务端配置 (一次性执行)
第一步:开启内核转发 & 关闭反向过滤
编辑配置文件:
sudo nano /etc/sysctl.conf
在文件末尾添加或修改以下内容:
# 开启 IP 转发
net.ipv4.ip_forward = 1
# 关闭反向路径过滤 (RP Filter) - 必须关闭,否则单臂路由丢包
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
应用配置:
sudo sysctl -p
第二步:配置防火墙转发规则 (持久化)
确保 Ubuntu 允许流量转发,而不是丢弃。
- 安装持久化工具:
- 设置默认策略为接受转发:
- 保存规则 (确保重启生效):
第三步:部署 tun2socks 二进制文件
(假设你已经下载好文件)
sudo mv tun2socks-linux-amd64 /usr/local/bin/tun2socks
sudo chmod +x /usr/local/bin/tun2socks
第四步:创建 Systemd 服务 (核心配置)
为了解决刚才的报错,我们采用 “先创建网卡,再启动程序” 的策略。
创建/覆盖服务文件:
sudo nano /etc/systemd/system/tun2socks.service
粘贴以下完整内容:
[Unit]
Description=Tun2Socks Gateway Service
After=network.target
[Service]
Type=simple
User=root
# --- 1. 环境准备 (ExecStartPre) ---
# 清理可能残留的旧设备
ExecStartPre=-/sbin/ip link delete tun0
# 手动创建 tun 设备 (避免 tun2socks 启动慢导致后续命令找不到设备)
ExecStartPre=/sbin/ip tuntap add dev tun0 mode tun
# 给 tun0 设置内部网关 IP
ExecStartPre=/sbin/ip addr add 10.0.0.1/24 dev tun0
# 先设置 MTU 为 1300,再启动
ExecStartPre=/sbin/ip link set dev tun0 mtu 1300
ExecStartPre=/sbin/ip link set tun0 up
# --- 2. 启动主程序 ---
# 注意:tun2socks 会直接接管已存在的 tun0
ExecStart=/usr/local/bin/tun2socks --device tun0 --proxy socks5://192.168.90.17:6666 --loglevel info
# --- 3. 配置策略路由 (ExecStartPost) ---
# 添加默认路由到表 100
ExecStartPost=/sbin/ip route add default via 10.0.0.1 dev tun0 table 100
# 关键规则:来自 Quest 3 的流量查表 100
ExecStartPost=/sbin/ip rule add from 192.168.90.200 lookup 100
# --- 4. 停止后清理 ---
ExecStopPost=-/sbin/ip rule del from 192.168.90.200 lookup 100
ExecStopPost=-/sbin/ip link delete tun0
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable tun2socks
sudo systemctl restart tun2socks
检查状态 (必须全是绿色 Active):
sudo systemctl status tun2socks
3. Quest 3 客户端配置 (头显内操作)
戴上头显,进入 设置 -> Wi-Fi,连接你的 Wi-Fi,点击已连接网络旁边的 **(i) 或 ✏️ (修改/高级选项)**。
改为 **静态 IP (Static IP)**:
- IP 地址:
192.168.90.200(必须与 Systemd 文件里的fromIP 一致) - 网关 (Gateway):
192.168.90.17(你的 Ubuntu IP) - 网络前缀长度:
24 - DNS 1:
8.8.8.8(关键!强制走 Google DNS,流量会被 Ubuntu 捕获并转发) - DNS 2:
1.1.1.1
4. 验证与排错
配置完成后,你可以通过以下方式验证:
方法 A:查看 Ubuntu 日志 (最直观)
# 实时查看日志
sudo journalctl -u tun2socks -f
戴上头显浏览网页或更新,你应该看到大量的 [UDP] ... <-> 8.8.8.8:53 和 [TCP] ... <-> MetaIP 日志滚动。
方法 B:抓包验证
# 如果有 tun0 Out 说明转发成功
sudo tcpdump -i tun0 -n
常见问题自查:
- 无 UDP 日志? -> 检查 Quest 3 的 DNS 是不是填成了 Ubuntu 的 IP (必须填 8.8.8.8)。
- 连不上网? -> 检查 Ubuntu 防火墙
iptables -P FORWARD ACCEPT是否执行。 - 重启后失效? -> 检查
net.ipv4.conf.all.rp_filter=0是否在sysctl.conf中持久化。
这套配置现在非常稳固,即便你重启 Ubuntu,服务也会自动拉起,路由规则也会自动添加。祝你的 Quest 3 之旅愉快!