tproxy Notes
发表于|更新于
|字数总计:696|阅读时长:3分钟|阅读量:
查看access日志
| 1
 | tail -f /var/log/xray/access.log
 | 
保存iptables规则
| 1
 | iptables-save > /etc/iptables/rules.v4
 | 
我的规则:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 
 | # Generated by iptables-save v1.8.9 (nf_tables) on Wed Nov  6 01:06:46 2024*mangle
 :PREROUTING ACCEPT [0:0]
 :INPUT ACCEPT [0:0]
 :FORWARD ACCEPT [0:0]
 :OUTPUT ACCEPT [0:0]
 :POSTROUTING ACCEPT [0:0]
 :XRAY - [0:0]
 :XRAY_MASK - [0:0]
 -A PREROUTING -j XRAY
 -A OUTPUT -p tcp -j XRAY_MASK
 -A OUTPUT -p udp -j XRAY_MASK
 -A XRAY -d 127.0.0.0/8 -j RETURN
 -A XRAY -d 10.0.0.0/24 -j RETURN
 -A XRAY -d 224.0.0.0/3 -j RETURN
 -A XRAY -p tcp -j TPROXY --on-port 12345 --on-ip 0.0.0.0 --tproxy-mark 0x1/0xffffffff
 -A XRAY -p udp -j TPROXY --on-port 12345 --on-ip 0.0.0.0 --tproxy-mark 0x1/0xffffffff
 -A XRAY_MASK -m owner --gid-owner 23333 -j RETURN
 -A XRAY_MASK -d 127.0.0.0/8 -j RETURN
 -A XRAY_MASK -d 10.0.0.0/24 -j RETURN
 -A XRAY_MASK -d 224.0.0.0/3 -j RETURN
 -A XRAY_MASK -j MARK --set-xmark 0x1/0xffffffff
 COMMIT
 # Completed on Wed Nov  6 01:06:46 2024
 
 | 
让xray运行在某用户上
| 12
 
 | grep -qw xray_tproxy /etc/passwd || echo "xray_tproxy:x:0:23333:::" >> /etc/passwd nano /etc/systemd/system/xray.service
 
 | 
更改User
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 
 | [Unit]Description=Xray Service
 After=network.target
 
 [Service]
 User=xray_tproxy
 ExecStart=/usr/local/bin/xray -config /etc/xray/config.json
 Restart=on-failure
 RestartSec=10s
 LimitNOFILE=65536
 
 [Install]
 WantedBy=multi-user.target
 
 | 
| 12
 3
 4
 5
 
 | systemctl daemon-reloadsystemctl enable xray.service
 systemctl start xray.service
 systemctl status xray.service
 journalctl -u xray.service -f
 
 | 
 Xray的config.json中outbound不要忘了"streamSettings"加一个"sockopt": {"mark": 2}。
ip route 和 ip rule 命令持久化
方法 1
使用 /etc/iproute2/rt_tables 和 /etc/network/interfaces 文件
- 在 /etc/iproute2/rt_tables中添加自定义路由表
编辑 /etc/iproute2/rt_tables 文件,添加一个自定义路由表条目(如果还没有的话)。
| 1
 | echo "100 custom_table" | sudo tee -a /etc/iproute2/rt_tables
 | 
这会将 100 号路由表命名为 custom_table,以便稍后可以引用它。
- 在 /etc/network/interfaces中配置路由和规则
在 /etc/network/interfaces 文件中配置这些规则,以便在网络启动时自动加载。
| 1
 | sudo nano /etc/network/interfaces
 | 
在文件末尾添加以下内容:
| 12
 3
 
 | # 添加到 loopback 接口的路由up ip route add local default dev lo table 100
 up ip rule add fwmark 1 table 100
 
 | 
方法 2:
使用 systemd 单元文件配置开机执行
如果 /etc/network/interfaces 中的配置未生效,或者希望以更系统化的方式管理这些命令,可以通过 systemd 创建一个服务文件来实现持久化。
-    创建 systemd 服务文件
| 1
 | sudo nano /etc/systemd/system/custom-route.service
 | 
-    在文件中添加以下内容:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 
 | [Unit]Description=Custom Routing Table and Rule
 After=network.target
 
 [Service]
 Type=oneshot
 ExecStart=/sbin/ip route add local default dev lo table 100
 ExecStart=/sbin/ip rule add fwmark 1 table 100
 RemainAfterExit=true
 
 [Install]
 WantedBy=multi-user.target
 
 | 
-    保存并关闭文件,然后启用和启动此服务:
| 12
 3
 
 | sudo systemctl daemon-reloadsudo systemctl enable custom-route.service
 sudo systemctl start custom-route.service
 
 | 
-    验证配置
使用以下命令检查路由和规则是否生效:
| 12
 
 | ip route show table 100ip rule list
 
 | 
但是上面两种方法看起来还是iptables-persistent方便