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

如何实现系统不能联网,但是系统上的应用可以联网?

  •  
  •   61162833 · 2024-07-07 10:27:08 +08:00 · 8273 次点击
    这是一个创建于 429 天前的主题,其中的信息可能已经有所发展或是发生改变。
    针对以下系统:
    1 、Windows
    2 、Android
    3 、MacOS
    4 、iOS
    5 、各种 linux desktop

    如何实现系统无联网权限,但是系统上的应用(例如 docker )有联网权限?

    (测试过 Windows10 系统的防火墙,只对特定应用开启联网权限,但是 windows 更新的域名即使加入其防火墙也不生效,系统仍然有联网权限...)
    53 条回复    2024-07-09 08:55:27 +08:00
    enihcam
        1
    enihcam  
       2024-07-07 10:44:34 +08:00   ❤️ 12
    听起来大概就是给一个杯子倒水,但杯子不能沾水。
    xjzshttps
        2
    xjzshttps  
       2024-07-07 10:49:11 +08:00   ❤️ 1
    将默认网关、dns 设置为错误的等方式阻止整个系统联网,然后针对个别应用开类似翻墙软件提供网络。
    zeyexe
        3
    zeyexe  
       2024-07-07 10:49:12 +08:00
    那就只能在系统外干这事了,让防火墙只放行应用的域名和端口
    61162833
        4
    61162833  
    OP
       2024-07-07 10:58:46 +08:00
    @zeyexe 在路由器上操作的问题是无法判断流量来自系统还是应用
    zeyexe
        5
    zeyexe  
       2024-07-07 11:01:59 +08:00
    不知道你的具体情况。难道你的系统(应用)会和要联网的应用使用相同的域名?
    yinmin
        6
    yinmin  
       2024-07-07 11:03:44 +08:00 via iPhone   ❤️ 1
    在局域网上设置一个代理服务器(低至几十元的硬件成本),linux 可以采用主机网卡不设 gateway 保证整机无法上网,单个应用配置 socks5 代理(如果应用没有代理配置,可以使用环境变量或 proxychains )

    windows 也可以采取类似方式,例如:proxifier
    yinmin
        7
    yinmin  
       2024-07-07 11:14:04 +08:00 via iPhone   ❤️ 1
    如果是 docker 就更简单了,linux 不设 gateway ,docker 创建一个 bridge 网络指定 gateway ,容器使用这个网络就能上网了
    xenme
        8
    xenme  
       2024-07-07 11:53:41 +08:00 via iPhone   ❤️ 1
    网卡直通给 vm ,然后业务跑 vm 里面,底层不要网卡,或者只能通内网的网卡
    Kinnice
        9
    Kinnice  
       2024-07-07 12:12:20 +08:00 via Android   ❤️ 1
    1. 在外部防火墙阻止所有流量
    2. 外部新增一个代理服务器,且在外部防火墙只放行这个代理服务器 ip 地址
    3. 给你的应用配置代理,如果应用没这个功能就需要借助类似 proxifier 的软件
    Zaden
        10
    Zaden  
       2024-07-07 12:22:37 +08:00 via Android   ❤️ 1
    61162833
        11
    61162833  
    OP
       2024-07-07 12:28:39 +08:00
    @Zaden 通过端口而非域名的方式屏蔽真是妙啊老哥
    IvanLi127
        12
    IvanLi127  
       2024-07-07 12:29:06 +08:00
    看起来只要操作系统无法驱动通信设备,但是应用能驱动就行了。重新做一套不通用的网卡,走其他通用协议让应用能识别,然后应用直接驱动就好了。系统不认识想用也不会用。
    0o0O0o0O0o
        13
    0o0O0o0O0o  
       2024-07-07 12:29:07 +08:00
    考虑到这么多平台,加上联网这个词的范围很广,其实这个需求一点也不简单,哪怕是在 Linux 上。建议理清自己的真实需求。
    icepie
        14
    icepie  
       2024-07-07 12:31:20 +08:00
    其实很简单, 走个不存在的代理就好了
    icepie
        15
    icepie  
       2024-07-07 12:32:01 +08:00
    好吧 是系统不能上网, 那就复杂了
    wushenlun
        16
    wushenlun  
       2024-07-07 12:51:13 +08:00
    系统联网无非就是上报数据/更新,抓包吧 ,开个空白系统,挂机在那抓包 1 整天,抓到的外网 IP 全封了,极端点就/24 全封了
    adrianzhang
        17
    adrianzhang  
       2024-07-07 12:56:02 +08:00   ❤️ 1
    系统外面设置防火墙,拦截所有,只放行通往局域网装了代理的机器的流量,而这个装了代理的机器不设置 ip 转发,然后系统特定应用使用 proxychains 代理到代理机器特定端口
    adrianzhang
        18
    adrianzhang  
       2024-07-07 13:05:44 +08:00   ❤️ 1
    @adrianzhang 发现需求还要管理手机端,那么方案改改。
    单独一个防火墙,可以硬件可以虚拟,固定 ip ,局域网所有设备的网关统一设置成防火墙地址,防火墙放行对代理机器 ip 的流量,其他全禁止,代理机器不设置 ip 转发,仅有通过端口的 socks 代理,然后设备上需要联网的应用走这个 socks 代理,手机上有小火箭等应用可以设置分应用代理。
    bigShrimp8577
        19
    bigShrimp8577  
       2024-07-07 13:47:25 +08:00
    本来我以为是希望鸡下蛋,又不希望有鸡存在的题目,结果评论区让我涨姿势了
    youdoit
        20
    youdoit  
       2024-07-07 14:43:32 +08:00
    买一台行为管理设备吧
    yohole
        21
    yohole  
       2024-07-07 15:26:42 +08:00   ❤️ 2
    感觉这里面隐藏了某个具体的需求,直接说清楚的话,可能会有更简单的方案
    zzznow
        22
    zzznow  
       2024-07-07 16:23:10 +08:00
    把相关域名加 hosts 呢?
    adoal
        23
    adoal  
       2024-07-07 16:30:35 +08:00
    如何从技术层面区分属于“系统”的组件程序 vs 自己安装的第三方应用程序?
    y1y1
        24
    y1y1  
       2024-07-07 16:41:46 +08:00 via iPhone
    网络出口设置防火墙规则
    EndlessMemory
        25
    EndlessMemory  
       2024-07-07 17:00:25 +08:00
    魔改系统吧
    Altairvelvet
        26
    Altairvelvet  
       2024-07-07 17:03:54 +08:00
    刁民
    busier
        27
    busier  
       2024-07-07 17:05:43 +08:00 via iPhone   ❤️ 1
    这活我经常干
    系统网卡 ipv4/v6 不配置网关,不配置 DNS
    软路由上开 socks5 代理,需要上网的应用设置走此代理
    最好不要设置系统级代理,因为很多软件能感知这个设置
    docx
        28
    docx  
       2024-07-07 17:06:46 +08:00 via iPhone
    内网跳板机,然后单独配置应用走代理?需求有点刁难了,最好说清具体想要实现的是什么。
    songge
        29
    songge  
       2024-07-07 17:10:03 +08:00
    策略组 应该可以吧
    shijingshijing
        30
    shijingshijing  
       2024-07-07 17:13:25 +08:00
    楼主所说的系统不能联网确切的讲应该是(系统级应用程序)不能联网,自己指定的应用程序能联网。

    操作系统不能联网想啥呢,所有的应用程序都是使用网络 API ,通过调用的 system call ,走网络协议栈,通过驱动调用网卡硬件进行网络通信的。

    Windows 更新如果微软狠一点,直接做进内核里,你通过本机 Windows 系统是没办法做任何限制的。只能通过路由器进行网络访问权限管理。
    laminux29
        31
    laminux29  
       2024-07-07 17:16:27 +08:00   ❤️ 1
    这是很基础且很常见的网工场景,典型的例子是虚拟化集群系统,实现方式是服务器多网口 + 每个网口不同网段 + 每个网口不同 vlan 或 vxlan 。有时候甚至厂家的部署工程师,为了不干扰用户私有网段,会给虚拟化系统的内部的业务配置 1.1.1.x 这样的网段。
    huihuilang
        32
    huihuilang  
       2024-07-07 17:24:19 +08:00 via Android
    用防火墙吧。。。把特定 ip 开白名单
    0o0O0o0O0o
        33
    0o0O0o0O0o  
       2024-07-07 17:38:30 +08:00 via iPhone
    @laminux29 #31 OP 的粒度是**各操作系统**具体的进程,不是某个 container ,甚至可能只有一个操作系统用户,我觉得这既不基础也不常见。我赞同 #30 ,我认为这几十层里所有方案都达不到这个需求,除非 OP 提出真正的需求并加以限制
    jackOff
        34
    jackOff  
       2024-07-07 17:47:16 +08:00
    网关设备写一个流量劫持中转服务,只有白名单流量才会通过,其他全部阻塞掉
    supereater
        35
    supereater  
       2024-07-07 18:41:12 +08:00
    先全局禁止,然后放行需要的应用吧
    nuk
        36
    nuk  
       2024-07-07 19:41:44 +08:00
    想到的几种办法:
    1. 用防火墙,不给系统默认网关,然后利用防火墙来丢到正确的网关
    2. hook socket 调用,给 udp 和 tcp 加一个 cookieid ,只有识别到 id 才放行,个人感觉这个会比较通用,但需要网关处理报文
    3. 设置 socks 代理,只有支持 socks 的应用会比较好用
    morpheuszero2023
        37
    morpheuszero2023  
       2024-07-07 20:54:48 +08:00
    只是禁用 Windows 自动更新的话可以用组策略,调两个设置即可,别的啥都不用动。
    ClericPy
        38
    ClericPy  
       2024-07-07 21:49:22 +08:00
    我这边 20 多个机器禁止联网,所以开了个低配置有公网权限的当网关代理转发的。。。
    Kenshiro
        39
    Kenshiro  
       2024-07-07 22:21:57 +08:00
    Windows 用 SimpleWall ,iOS 等等的要么自建 DNS ( NEXTDNS 等等)或路由器挡。DNS 那步我成了,但国内这智障网络默认是挡的自建 DNS ,所以最好全局
    Routeros
        40
    Routeros  
       2024-07-07 22:36:09 +08:00
    这天聊的就扯淡。传输层还是会交给系统来处理的。
    luojiyin87
        41
    luojiyin87  
       2024-07-08 08:56:49 +08:00
    要靠独立的防火墙和自建 dns 服务器了,规则要一条条建。 操作系统要虚拟化。 这是要做密保?
    zhangdawei
        42
    zhangdawei  
       2024-07-08 09:13:54 +08:00
    Windows 的化,可以走一条 usb 驱动,自建 tcp 协议,单独应用装载驱动
    test0x01
        43
    test0x01  
       2024-07-08 09:26:37 +08:00 via Android
    局域网不允许上网 只有使用特定代理才可以上网
    yulihao
        44
    yulihao  
       2024-07-08 10:10:51 +08:00
    走代理不就好了
    vueli
        45
    vueli  
       2024-07-08 10:13:30 +08:00
    网关直接白名单通行
    huangya
        46
    huangya  
       2024-07-08 10:34:47 +08:00
    @laminux29 好奇问一下,如果用 1.1.1.x 这样的网段,是不是这些机器不连接互联网?因为理论上 1.1.1.x 是公网吧?这样会与公网冲突。
    YGBlvcAK
        47
    YGBlvcAK  
       2024-07-08 10:57:01 +08:00
    你这么多系统都要实现这个功能,肯定不能在系统上想办法,只能系统外,也不是所有的应用都支持代理模式,所以唯一的答案可能就是防火墙+白名单模式了

    防火墙只开放特定的域名和 ip ,麻烦的点是可能要手动抓取一些应用的域名和 ip
    zbatman
        48
    zbatman  
       2024-07-08 11:24:33 +08:00
    建议描述下原始需求
    bobryjosin
        49
    bobryjosin  
       2024-07-08 11:40:22 +08:00
    @huangya 内部互联无所谓,只要不访问对应 ip 段的公网服务就没事,我见过有些地方电信拿 1.1.1.1 做内部 ip 的,你看出过什么大事吗?其实没有,也就我们这种要访问 cloudflare 的会骂一嘴。
    Mystery0
        50
    Mystery0  
       2024-07-08 18:33:45 +08:00
    怼到光猫上让 docker 容器来拨号?
    freddyzeng
        51
    freddyzeng  
       2024-07-08 23:44:17 +08:00 via iPhone
    我现在就是这样的。
    a:需要处理为系统不能上网,但是可以上外网的电脑,a 的 IP 为 192.168.110.2 ,网关设置为空。
    b:一台能上网的电脑,b 的 ip 为 192.168.110.3 ,b 的网关为 192.168.110.1 。

    然后具体需要上网的程序,需要配置 http 代理指向电脑 b ,如果你的 b 电脑是 win 可以开个 v2rayNG ,提供局域网的 http 代理。电脑 b 其实可以是使用 op 的 passwall 提供的 http 代理。


    再说一下,为啥我会有这种需求呢?
    有些东西不想泄漏,所以担心开源的工具有漏洞,如果它是完全局域网来使用,就比较安全了。
    freddyzeng
        52
    freddyzeng  
       2024-07-08 23:52:28 +08:00 via iPhone
    意思就是,你可以给 docker 配置一个局域网代理来让 docker 上网。但是你的实体主机不要设置网关,但是需要手动给他设置一个 ip ,使用 ip 转发 http 到其它能上网的主机。而自身又没有默认网关。


    如果熟悉 iptables 的话,真的可以设置权,拦截,然后来源是某个程序的流量就当行。类似 v2ray 透明那样的处理。不过是按自己的逻辑修改的才行。应该也是可以的。但是对于安全和简单处理的话,还是设置 http 代理比较好。如果程序无法设置代理,那只能使用 iptables 标记某个程序发出流量,再在 op 网关那里拦截没有标记的流量包。思路应该是这样
    tairan2006
        53
    tairan2006  
       2024-07-09 08:55:27 +08:00
    iptable 无所不能
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3031 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 13:58 · PVG 21:58 · LAX 06:58 · JFK 09:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.