XTLS / Xray-core

Xray, Penetrates Everything. Also the best v2ray-core, with XTLS support. Fully compatible configuration.
https://t.me/projectXray
Mozilla Public License 2.0
24.62k stars 3.85k forks source link

关于流量走指定网卡的问题 #3331

Closed fyhong closed 5 months ago

fyhong commented 5 months ago

完整性要求

版本

1.83以上所有版本都最新版都试过

描述

我想指定某个用户走pptp流量, 在linux连接pptp后,会出现一个ppp0之类的网卡, 我将它标记为table 1001 然后按以下配置,如果我设定es用户走pptp连接. 当我连接pptp时,分流完全没问题。但有时pptp连接在我不知情的情况下自动断开, 流量会自动跳动本地默认网卡。 哪怕我在outbund最前面加一个失效的出口,它仍然会走有效的默认网卡正常流量出口 inbound配置 { "type": "field", "user": [ "es1" ] , "outboundTag": "es1" }, { "type": "field", "user": [ "es2" ] , "outboundTag": "es2" },

outbound配置 { "protocol": "shadowsocks", "bad": "tag", "settings": { "servers": [ { "address": "aaa.com", "port": 11, "method": "chacha20-poly1305", "password": "111" } ] } }, //为了防止pptp断开时有网络连接,设定一个无效的outbound在第一行,但没效果。在pptp断开后,上面两个用户仍然会走vps自身的ip, 而且可以联网 { "protocol": "freedom", "settings": { "domainStrategy": "UseIP" }, "streamSettings": { "sockopt": { "mark": 1001 } }, "tag": "esros" }, { "protocol": "freedom", "settings": { "domainStrategy": "UseIP" }, "streamSettings": { "sockopt": { "interface": "ppp1"} }, "tag": "esros2" },

route配置 { "type": "field", "user": [ "es" ] , "outboundTag": "esros" }, { "type": "field", "user": [ "es2" ] , "outboundTag": "esros2" },

重现方式

将已连接的vpn边接断开,流量马上跳到vps主机默认ip. outbound第一行设置无效出口也没效果

日志

No response

fyhong commented 5 months ago

无效我用ip rule分流,还是用interface分流,在断开pptp连接后都无法走第一个outbound

Fangliding commented 5 months ago

这是core的设计 在尝试bind到指定device失败后走系统默认 对于网卡可能掉线这样的复杂情况 建议设置mark然后使用策略路由指定网卡

fyhong commented 5 months ago

我一开始是用mark来指定的。掉线后也是会返回默认网卡的。不会返回到我指定的第一个outbound.

Fangliding commented 5 months ago

首先 第二个outbound就算是炸了 也不会用第一个outbound 不知道你说的 “设定一个无效的outbound在第一行” 是干啥 其次 策略路由应该是不会回落的 有的话也是路由的问题不是core的问题

fyhong commented 5 months ago

我用一份配置解释清楚一点

{
"inbounds": [
{ "port": 9295, "protocol": "vless",  "settings": {  "decryption": "none",              
"clients": [
{ "id": "id01", "flow": "xtls-rprx-vision", "email": "id01" },
{ "id": "id02", "flow": "xtls-rprx-vision", "email": "id02" },
{ "id": "id03", "flow": "xtls-rprx-vision", "email": "id03" },
 ] },
 "streamSettings": { "network": "tcp", "security": "reality",
                "realitySettings": { "show": false, "dest": "www.xxx.com:443", "xver": 0, 
                    "serverNames": [ "www.xxx.com" ],
                    "privateKey": "customkey",
                    "shortIds": [ "a1", "a2", "a3" ]
                } }
}
],
"outbounds": [
{ "protocol": "shadowsocks", "tag": "ss3", "settings": { "servers": [ { "address": "server3", "port": 3333,  "method": "chacha20-poly1305", "password": "3333"  } ] } },
{ "protocol": "shadowsocks", "tag": "ss1", "settings": { "servers": [ { "address": "server1", "port": 1111,  "method": "chacha20-poly1305", "password": "1111"  } ] } },

{ "protocol": "shadowsocks", "tag": "ss2", "settings": { "servers": [ { "address": "Mserver2", "port": 2222,  "method": "chacha20-poly1305", "password": "2222"  } ] } },

],
  "routing": {
    "domainStrategy": "IPOnDemand",
    "strategy": "rules",
    "rules": [
{ "type": "field", "user": [ "id01" ] , "outboundTag": "ss1" },
{ "type": "field", "user": [ "id02" ] , "outboundTag": "ss2" },

   ]
  }
}

以上配置是不是id01会走ss1出口,id02走ss2出口,id03没标记路由规则 ,走默认第一行ss3出口。就算ss1,ss2出口挂了, id01和id02并不会走freedom,而是直接断网 假如我将配置改为下面的样子

{
"inbounds": [
{ "port": 9295, "protocol": "vless",  "settings": {  "decryption": "none",              
"clients": [
{ "id": "id01", "flow": "xtls-rprx-vision", "email": "id01" },
{ "id": "id02", "flow": "xtls-rprx-vision", "email": "id02" },
{ "id": "id03", "flow": "xtls-rprx-vision", "email": "id03" },
 ] },
 "streamSettings": { "network": "tcp", "security": "reality",
                "realitySettings": { "show": false, "dest": "www.xxx.com:443", "xver": 0, 
                    "serverNames": [ "www.xxx.com" ],
                    "privateKey": "customkey",
                    "shortIds": [ "a1", "a2", "a3" ]
                } }
}
],
"outbounds": [
{ "protocol": "shadowsocks", "tag": "ss3", "settings": { "servers": [ { "address": "server3", "port": 3333,  "method": "chacha20-poly1305", "password": "3333"  } ] } }, //一个虚构的ss节点,为了让没指定路由规则的ID断网
{ "protocol": "freedom", "settings": { "domainStrategy": "UseIP" }, "streamSettings": { "sockopt": { "mark": 1001 } }, "tag": "ss1" },
{ "protocol": "freedom", "settings": { "domainStrategy": "UseIP" }, "streamSettings": { "sockopt": { "mark": 1002 } }, "tag": "ss2" },

],
  "routing": {
    "domainStrategy": "IPOnDemand",
    "strategy": "rules",
    "rules": [
{ "type": "field", "user": [ "id01" ] , "outboundTag": "ss1" },
{ "type": "field", "user": [ "id02" ] , "outboundTag": "ss2" },

   ]
  }
}

这时理论上应该是id01走ss1, id02走ss2, id03走ss3,
但当我的pptp连接断开后,ss1和ss2出口不存在了,理应id01和id02会走ss3,直接断网才对。 我现在的结果是id01和id02在没有ss1和ss2出口后,不会走ss3出口,而是走了系统自身网卡出口。会变成有网络连接,返回的是vps自身的IP。

Fangliding commented 5 months ago

你那个pptp掉线之后 ss1和ss2怎么可能消失 你为什么觉得它们会消失。。它们还是在的 会按照设置打上mark 再往后怎么走就是你自己路由的问题了 按照之前的interface的写法 情况和我说的一样 xray会尝试bind至指定interface 失败后在日志输出(然后你没填日志) 但是不会断开连接 会走默认

xqzr commented 5 months ago

你那个pptp掉线之后 ss1和ss2怎么可能消失 。。它们还是在的 会按照设置打上mark 再往后怎么走就是你自己路由的问题了 按照之前的interface的写法 情况和我说的一样 xray会尝试bind至指定interface 失败后在日志输出(然后你没填日志) 但是不会断开连接 会走默认

他说的 “消失” 应该是指 不可用

fyhong commented 4 months ago

你那个pptp掉线之后 ss1和ss2怎么可能消失 你为什么觉得它们会消失。。它们还是在的 会按照设置打上mark 再往后怎么走就是你自己路由的问题了 按照之前的interface的写法 情况和我说的一样 xray会尝试bind至指定interface 失败后在日志输出(然后你没填日志) 但是不会断开连接 会走默认

ss1就是ppp0网卡(pptp拨出来的) , ss2就是ppp1网卡 (pptp拨出来的) 当pptp意外断开后,这两个网卡就会消失。 就代表上面设置的ss1和ss2出口失效。。理论上所有Id会走s3(第一个默认outbound) 但实际运行的结果并不会。只会走系统eth0网卡

Fangliding commented 4 months ago

xray内部没有失效这个概念 哪怕你配置文件写个错的如果没panic它也只是会连不上一直报错而已 你取的sss123只是出站的名字而已 为什么你就是觉得网卡掉线出站会消失。。。

fyhong commented 4 months ago

xray内部没有失效这个概念 哪怕你配置文件写个错的如果没panic它也只是会连不上一直报错而已 你取的sss123只是出站的名字而已 为什么你就是觉得网卡掉线出站会消失。。。

麻烦你看清楚,我哪里说出口消失了呢?我只是说出口失效。消失的是网卡。ppp0和ppp1。 你搞不懂我在问什么的话,你可以不回答的。上面的那位xqzr就能理解我的意思,人家选择不回答。 你连理解都理解不了就一直在这里乱说一通。有意思吗? 凡是好好看一下上面两个配置都知道我要表达的是什么。

Fangliding commented 4 months ago

失效了也一样啊 网卡掉了 出站在那还是走那两个出站 为什么

理应id01和id02会走ss3

到底谁在乱说一通啊。。。

chise0713 commented 4 months ago

需求,预期行为,最简可复现配置,日志。是真的一个都没