V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wanmyj
V2EX  ›  宽带症候群

科学上网,服务器上开透明代理方法很多,但是如何才能不代理本机

  •  
  •   wanmyj · 2023-01-09 18:15:46 +08:00 · 3231 次点击
    这是一个创建于 676 天前的主题,其中的信息可能已经有所发展或是发生改变。

    centos 做家庭服务器,现在需要给 XBOX 科学上网,我可以在服务器上装一个 clash ,不管是用透明代理,还是 socks/http 代理,给 XBOX 科学上网的需求可以满足,但是这会让我的服务器上网也走 clash ,这不是我所希望的。

    所以能不能完成这个需求,就是服务器上搭建透明网关或者 http/socks 代理服务,提供给同一局域网内其他设备上网,但服务器本身的上网选择直连路由器。

    我有想过一个方法,但是有点麻烦而且需要 vlan 交换机,多占一个端口(因为路由器不支持 vlan)。就是已有默认 vlan 的 ip1 ,再新建一个 vlan2 interface ,虚拟 mac 获取 IP 地址 ip2 。服务器上网用默认 vlan ,代理建立在 vlan2 的 ip2 上,隔离两个网络。

    所以请教下 v2 的大佬们,多谢多谢

    33 条回复    2023-10-12 18:01:42 +08:00
    Puteulanus
        1
    Puteulanus  
       2023-01-09 18:20:55 +08:00
    我是直接起了台虚拟机桥接网卡跑 uu 加速器
    rrfeng
        2
    rrfeng  
       2023-01-09 18:21:27 +08:00
    首先你说的是错的,如果不是透明代理,那么默认不可能代理本地请求。除非客户端指定使用代理。

    其次,要看透明代理的『透明』流量转发是什么,比如 iptables + redir ,很容易插入一条本机流量例外的规则。
    dcty
        3
    dcty  
       2023-01-09 18:29:14 +08:00   ❤️ 1
    可以让本机(跑 clash )的机器不走代理的。
    centos docker 跑个 clash 也可以的。
    wanmyj
        4
    wanmyj  
    OP
       2023-01-09 18:34:58 +08:00
    @Puteulanus 也是一个办法,但是不太适合我的 homelab ,不想换系统了
    @rrfeng 如果 clash 这类工具可以只启动 http/socks 的话就好了。iptable+redir 加本地流量例外我觉得这个办法倒是不错,可以操作试试
    wanmyj
        5
    wanmyj  
    OP
       2023-01-09 18:38:12 +08:00
    @dcty 可以让本机(跑 clash )的机器不走代理的。 ------> 是需要设置 iptables 吗?
    centos docker 跑个 clash 也可以的。 ---------> 用 bridge network ,留出来代理的端口,直接给局域网内其他设备连 http 、socks ,如果这个理解没错的话,我感觉这个就完美解决了我的需求
    cxh116
        6
    cxh116  
       2023-01-09 18:44:02 +08:00 via Android   ❤️ 1
    虚拟机装个 openwrt ,openwrt 再装 shadowsocks ,xbox 走 openwrt ,或闲鱼收个 50 左右 MT7620A 路由做旁路由,可以刷 openwrt 的。
    aru
        7
    aru  
       2023-01-09 19:00:53 +08:00   ❤️ 1
    centos 机器用 libvirt 开一个虚拟机,在虚拟机上搞透明代理就好了
    LGA1150
        8
    LGA1150  
       2023-01-09 20:04:24 +08:00   ❤️ 2
    本机发送的 IP 报文,和转发的 IP 报文,在 Linux ip_output 函数之前走的是不同的路径
    本机发送:ip_local_out() -> Netfilter OUTPUT hook -> ip_output() -> Netfilter POSTROUTING hook -> ip_finish_output()
    转发:ip_rcv() -> Netfilter PREROUTING hook -> ip_rcv_finish() -> ip_forward() -> Netfilter FORWARD hook -> ip_forward_finish() -> ip_output() -> Netfilter POSTROUTING hook -> ip_finish_output()

    透明代理,无非是 iptables DNAT/REDIRECT/TPROXY 规则,插入到 PREROUTING 就是代理转发,插入到 OUTPUT 就是代理本机。
    A01514035
        9
    A01514035  
       2023-01-09 20:40:52 +08:00   ❤️ 1
    https://github.com/SuLingGG/OpenWrt-Docker
    正好是前几天我折腾的,用 docker 跑个 openwrt 作为旁路由,供局域网内其他机器科学上网。
    IvanLi127
        10
    IvanLi127  
       2023-01-09 20:52:26 +08:00
    请教下 OP ,服务器上网也走 clash 的话,那其他机子访问服务器里的服务是能正常访问吗?
    wanmyj
        11
    wanmyj  
    OP
       2023-01-09 20:57:51 +08:00
    @IvanLi127 正常,一般 clash 的 yaml 规则里都会过滤局域网段的流量,局域网段的流量不会走到 clash 里
    wanmyj
        12
    wanmyj  
    OP
       2023-01-09 21:01:15 +08:00
    @LGA1150 清晰专业,大佬受我一拜!🙏
    IvanLi127
        13
    IvanLi127  
       2023-01-09 21:05:18 +08:00
    @wanmyj 这样,我还以为我能抄作业了,哈哈。其实我想在国内服务器上全局代理,看来还是只能手动排除服务监听的端口
    cwbsw
        14
    cwbsw  
       2023-01-09 21:30:47 +08:00
    本机流量和转发流量的 hook 点本来就不一样啊,一个在 prerouting 一个在 output 。
    SenLief
        15
    SenLief  
       2023-01-09 22:18:23 +08:00
    clash 本身不是就支持 http/socks 代理的吗?直接不用透明代理不行的吗
    dianso
        16
    dianso  
       2023-01-09 22:28:42 +08:00
    路由器设置 pac 是不是就可以
    ashone07
        17
    ashone07  
       2023-01-09 22:48:06 +08:00
    用旁路由很好解决,需要走代理的设备网关设置为旁路由,不需要的设备网关用主路由
    fish3125
        18
    fish3125  
       2023-01-09 22:52:28 +08:00 via iPhone
    如果透明代理的方式改成 fakeip ,只要修改 dns 就可以决定哪些机器不走代理。
    wangbin526
        19
    wangbin526  
       2023-01-09 22:58:14 +08:00 via Android
    开虚拟机跑个 iStoreOS 再装科学插件,这货自带旁路由模式,设置简单很多
    Jirajine
        20
    Jirajine  
       2023-01-10 01:56:45 +08:00
    你是用的一键脚本吧,自己配置你不专门劫持本机出站流量本身就不会代理本机。
    wanmyj
        21
    wanmyj  
    OP
       2023-01-10 11:31:21 +08:00
    @fish3125 只修改 dns 就可以决定哪些机器不走代理,这个是什么原理,怎么做到的,愿闻其详
    virualv
        22
    virualv  
       2023-01-10 11:47:56 +08:00 via iPhone
    xray 可以,但是切节点比较费事
    fish3125
        23
    fish3125  
       2023-01-10 11:47:57 +08:00
    1. 把 dns 解析转发给 clash 的 dns 端口。然后 clash 会按照你在 clash 里的规则来返回正常或者 fakeip 。
    我是用 adg 只把 gfw 列表转发给 clash ,让 clash 的 dns 返回的全是 fakeip 。

    2. 如果用开源的 clash ,没有 tun 模式,但是可以把 fakeip 转发给 clash 的 redir-port ,内部会自动完成正确域名的转换。
    iptables -t nat -A OUTPUT -p tcp -d 198.18.0.0/16 -j REDIRECT --to-port 8088
    iptables -t nat -A PREROUTING -p tcp -d 198.18.0.0/16 -j REDIRECT --to-port 8088 #把 ip 段重定向到 clash 的 redir-port

    只要解析不经过 clash 的 dns ,就不会走透明代理。
    fish3125
        24
    fish3125  
       2023-01-10 11:55:31 +08:00
    fakeip 模式个人使用下来比使用 ipset 来创建 ip 集合的模式稳定,
    让 clash 的 dns 返回的全是 fakeip ,clash 的配置文档也只需要添加
    ```
    dns:
    enable: true
    listen: 0.0.0.0:8088
    enhanced-mode: fake-ip
    nameserver:
    - 8.8.8.8
    ```
    fish3125
        25
    fish3125  
       2023-01-10 12:00:23 +08:00
    修改下,端口打错了。。
    fakeip 模式个人使用下来比使用 ipset 来创建 ip 集合的模式稳定,
    让 clash 的 dns 返回的全是 fakeip ,clash 的配置文档也只需要添加
    ```
    dns:
    enable: true
    listen: 0.0.0.0:8089 #这个是 clash 的 dns 端口,
    enhanced-mode: fake-ip
    nameserver:
    - 8.8.8.8
    ```
    strp
        26
    strp  
       2023-01-10 13:05:04 +08:00
    开个 4C2G 虚拟机装 OpenWrt ,上面挂 ShadowsocksR Plus+,哪个设备需要翻墙哪个设备就网关指向 OP ,你路由器支持的话还可以在设置里修改 DHCP 服务器分配网关为 OP 的地址,简单旁路由就这样做好啦。
    systemcall
        27
    systemcall  
       2023-01-10 19:47:37 +08:00
    clash 和 v2ray 默认不就是只开一个 http/socks 代理吗?
    你的需求很简单,不要用什么整合了一大堆功能的软件,只用 clash 或者 v2ray 本身,自己写个脚本生成配置文件就好了
    没有用过 xbox ,我只能说 ps 和 steam deck 是可以直接走 http 或者 socks 代理的。设备上面手动配置一下就可以了
    可能需要在防火墙里面放行对应端口
    Penguium
        28
    Penguium  
       2023-01-11 00:04:06 +08:00 via Android
    直接规则里加一条服务器 ip 直连就行了吧
    mmdsun
        29
    mmdsun  
       2023-01-11 13:00:25 +08:00 via iPhone
    现在没玩软路由了。我是家用路由器刷的梅林固件,来加速 Xbox 游戏机的。猫咪插件默认不代理路由器自身流量
    sbmzhcn
        30
    sbmzhcn  
       2023-10-10 13:36:38 +08:00
    请问这个如何解决的,开启 v2ray 后,希望默认不要走透明代理,我发现全部流量都经过了 tproxy ,我想默认直连,不经过 v2ray, 连接端口 10801 时才走 v2ray
    wanmyj
        31
    wanmyj  
    OP
       2023-10-10 14:20:56 +08:00
    @sbmzhcn 我后来把 iptable 重新学习了一遍,参考 @LGA1150 的回答。
    这个要看一下自己的 iptables ,看下 TPROXY 规则插入的位置和内容。

    当时弄了一圈虽然弄好了,但感觉挺麻烦的,后来直接不管这个了,时间和学习代价太高,收益低。
    sbmzhcn
        32
    sbmzhcn  
       2023-10-11 14:06:55 +08:00
    @wanmyj 谢谢回答,这个应该挺麻烦的,我看了下自己机器 Centos7 iptables 是空的,所以不明白它怎么实现所有的流量走 v2ray 的,答案还是需要搞 iptables
    wanmyj
        33
    wanmyj  
    OP
       2023-10-12 18:01:42 +08:00
    @sbmzhcn iptables 如果全是空,肯定是无法实现代理的。如果已经实现了本机代理,你要看下你 iptables 的 PREROUTING 和 OUTPUT 的几张表,里面应该有内容
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2869 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 02:47 · PVG 10:47 · LAX 18:47 · JFK 21:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.