3X-UI(XrayUI)如何为订阅或客户端分配指定IP地址?
多IP虚拟服务器为客户端/订阅分配指定IP的实现方法
一、代理/VPN类订阅场景(比如Shadowsocks、V2Ray/Xray)
这应该是你说的“订阅”最常见的情况,直接在代理软件的配置里指定出站IP就行:
- Shadowsocks:修改
config.json配置文件,把server字段设成你要分配的IP;如果要给不同订阅分不同IP,就复制多份配置块,每个块用不同的IP和端口,再对应生成各自的订阅链接:{ "server": "你的目标IP地址", "server_port": 8388, "password": "你的密码", "method": "aes-256-gcm" } - V2Ray/Xray:可以在出站规则里给不同客户端绑定专属IP,比如给客户端1分配IP1,客户端2分配IP2:
之后给不同客户端分发对应"outbounds": [ { "tag": "ip1-out", "protocol": "freedom", "settings": { "address": "目标IP1" } }, { "tag": "ip2-out", "protocol": "freedom", "settings": { "address": "目标IP2" } } ], "routing": { "rules": [ { "type": "field", "inboundTag": ["client1"], "outboundTag": "ip1-out" }, { "type": "field", "inboundTag": ["client2"], "outboundTag": "ip2-out" } ] }inboundTag的订阅链接,它们就会用指定IP出站。
二、用路由策略分配特定流量的出口IP
如果你是要让服务器上的某个进程,或者发往特定客户端的流量用指定IP,用iproute2和iptables就能实现:
- 给单个进程绑定IP:
- 先添加自定义路由表:
echo "100 ip1table" >> /etc/iproute2/rt_tables - 给这个路由表加默认路由,指定源IP为你要分配的那个:
ip route add default via 你的服务器网关IP dev 网卡名 src 目标IP table ip1table - 加规则让标记过的流量走这个路由表:
ip rule add fwmark 1 table ip1table - 用iptables给目标进程的流量打标记(把
进程PID换成实际进程ID):iptables -t mangle -A OUTPUT -p tcp -m owner --pid-owner 进程PID -j MARK --set-mark 1
- 先添加自定义路由表:
- 给特定客户端/网段分配出口IP:用SNAT规则,比如所有发往192.168.1.0/24的流量用IP2出站:
iptables -t nat -A POSTROUTING -d 192.168.1.0/24 -j SNAT --to-source 你的服务器IP2
三、Web服务/反向代理场景
如果是给不同域名的Web服务分配不同IP,直接在Nginx这类软件里指定监听IP就行:
server { listen 目标IP1:80; server_name site1.com; # 其他站点配置 } server { listen 目标IP2:80; server_name site2.com; # 其他站点配置 }
这样用户访问不同域名时,就会对应到你指定的服务器IP。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

