将Ubuntu 打造成一个Quest 3专用透明代理网关

目录

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 允许流量转发,而不是丢弃。

  1. 安装持久化工具:
  2. 设置默认策略为接受转发:
  3. 保存规则 (确保重启生效):

第三步:部署 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 文件里的 from IP 一致)
  • 网关 (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

常见问题自查:

  1. 无 UDP 日志? -> 检查 Quest 3 的 DNS 是不是填成了 Ubuntu 的 IP (必须填 8.8.8.8)。
  2. 连不上网? -> 检查 Ubuntu 防火墙 iptables -P FORWARD ACCEPT 是否执行。
  3. 重启后失效? -> 检查 net.ipv4.conf.all.rp_filter=0 是否在 sysctl.conf 中持久化。

这套配置现在非常稳固,即便你重启 Ubuntu,服务也会自动拉起,路由规则也会自动添加。祝你的 Quest 3 之旅愉快!