查看access日志

1
tail -f /var/log/xray/access.log

保存iptables规则

1
iptables-save > /etc/iptables/rules.v4

我的规则:

1
2
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运行在某用户上

1
2
grep -qw xray_tproxy /etc/passwd || echo "xray_tproxy:x:0:23333:::" >> /etc/passwd # 添加用户
nano /etc/systemd/system/xray.service

更改User

1
2
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
1
2
3
4
5
systemctl daemon-reload
systemctl enable xray.service
systemctl start xray.service
systemctl status xray.service
journalctl -u xray.service -f # 查看日志

Xrayconfig.jsonoutbound不要忘了"streamSettings"加一个"sockopt": {"mark": 2}

ip route 和 ip rule 命令持久化

方法 1

使用 /etc/iproute2/rt_tables/etc/network/interfaces 文件

  1. /etc/iproute2/rt_tables 中添加自定义路由表

编辑 /etc/iproute2/rt_tables 文件,添加一个自定义路由表条目(如果还没有的话)。

1
echo "100 custom_table" | sudo tee -a /etc/iproute2/rt_tables

这会将 100 号路由表命名为 custom_table,以便稍后可以引用它。

  1. /etc/network/interfaces 中配置路由和规则

/etc/network/interfaces 文件中配置这些规则,以便在网络启动时自动加载。

1
sudo nano /etc/network/interfaces

在文件末尾添加以下内容:

1
2
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 创建一个服务文件来实现持久化。

  1. 创建 systemd 服务文件
1
sudo nano /etc/systemd/system/custom-route.service
  1. 在文件中添加以下内容:
1
2
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
  1. 保存并关闭文件,然后启用和启动此服务:
1
2
3
sudo systemctl daemon-reload
sudo systemctl enable custom-route.service
sudo systemctl start custom-route.service
  1. 验证配置

使用以下命令检查路由和规则是否生效:

1
2
ip route show table 100
ip rule list

但是上面两种方法看起来还是iptables-persistent方便