V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
basncy
V2EX  ›  Windows

windows 居然搞不定出站端口转发...

  •  
  •   basncy · 289 天前 · 3082 次点击
    这是一个创建于 289 天前的主题,其中的信息可能已经有所发展或是发生改变。
    只想把所有出站 tcp 443 转发到 1.2.3.4:8443, 类似于 linux 下的
    iptables -t nat -A OUTPUT -p tcp -m tcp --dport 443 -j DNAT --to-destination 1.2.3.4:8443
    居然木有办法....
    24 条回复    2023-07-26 19:51:04 +08:00
    iamwho
        1
    iamwho  
       289 天前   ❤️ 1
    话说清楚,是你搞不定,不是 Windows 搞不定。
    ysc3839
        2
    ysc3839  
       289 天前 via Android
    是的,Windows 的网络功能相比类 Unix 系统都少了很多的。部分功能(如 VLAN NAT)在 Windows Server 中有,非 Server 没有。还有一些高级功能则是 Server 也没有。
    gleox
        3
    gleox  
       289 天前   ❤️ 1
    可以用 netsh 的端口代理功能

    ```ps1
    # 以管理员身份运行
    netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=443 connectaddress=1.2.3.4 connectport=8443
    ```
    gleox
        4
    gleox  
       289 天前
    没注意审题,出站啊
    yinmin
        5
    yinmin  
       289 天前 via iPhone
    纯微软方案:iis+arr+rewrite ,具体部署可以问 chatgpt
    tool2d
        6
    tool2d  
       289 天前 via Android
    可以的,需要安装一个第三方的 ip 包过滤和拦截器驱动。
    windows 没有自带。
    basncy
        7
    basncy  
    OP
       289 天前
    @yinmin 网络层的东西, 不想放到应用层去做. 某些设备不能动, 要不然一个 pac 文件就搞定的.
    yinmin
        8
    yinmin  
       289 天前 via iPhone
    windows 做 nat ,在“路由与远程访问”里配置。如果做 tcp 转发(四层)见 3 楼,如果做 https 转发(七层)见 5 楼,都是纯微软方案
    ysc3839
        9
    ysc3839  
       289 天前 via Android   ❤️ 1
    @tool2d 内核层面一般是可以的,主要问题是没自带。

    如果使用第三方的话,也许可以考虑一下 eBPF for Windows ? https://github.com/microsoft/ebpf-for-windows
    不过我不知道能否用来转发包。
    mohumohu
        10
    mohumohu  
       289 天前
    一条 gost 命令就搞定了
    basncy
        11
    basncy  
    OP
       289 天前
    3 楼是入站转发, 5 楼的工作在 1.2.3.4:8443 做了... 需要把 https 数据发给 1.2.3.4:8443
    装三方 app 有合规风险.

    想了一下, 还是 1.改 dns 得到选择性泛解析,2.配合 3 楼. 两行基础命令, 方便无风险.
    documentzhangx66
        12
    documentzhangx66  
       289 天前
    楼主的问题在于选错了方案。

    任何东西都有自己的优缺点,都有自己的适用场景。Windows 的确不合适做这个事情,但 x86 的 Linux 其实也不合适。

    正确的方案应该用硬路由去做,或者基于哈佛架构的 ARM 的 OpenWRT 。
    flyqie
        13
    flyqie  
       289 天前 via Android
    @documentzhangx66 #12

    你这方案。。

    楼主可能只想在本地做下转发,你这一下就给楼主怼到路由设备上了。。

    楼主也没说他设备就一定是 x86 啊,现在 windows 也有 arm 版,况且 openwrt 也是一个 linux 发行版。。
    duke807
        14
    duke807  
       289 天前 via Android
    把 windows 安装到 linux 主机的虚拟机里面
    JensenQian
        15
    JensenQian  
       289 天前 via Android
    整个 pve 里装 windows
    yeqizhang
        16
    yeqizhang  
       289 天前 via Android
    搞个虚拟网卡,可以将指定出栈 ip 转发到某个 destination ,不确定是不是可以将所有 ip
    zed1018
        17
    zed1018  
       288 天前
    你这个不就是 clash tun 么(
    sujin190
        18
    sujin190  
       288 天前 via Android
    或许用 proxifier 按应用程序拦截应该是比较容易的方案了吧
    documentzhangx66
        19
    documentzhangx66  
       288 天前
    @flyqie

    不要觉得 [只想做 XXXX] 这种需求很简单。

    比如我只想在小米 K50Pro 手机上玩绝地求生,你觉得我这需求,真的只是 [只想] 级别?

    用正确的工具,做正确的事,不要浪费时间去钻牛角尖,这才是王者办事的准则。当然,科研除外。
    roofs
        20
    roofs  
       288 天前
    黄老爷!!!
    roofs
        21
    roofs  
       288 天前
    @gleox 黄老爷!!!
    kenvix
        22
    kenvix  
       288 天前
    Windows 的网络功能确实垃圾,我到现在都不知道在 Windows 上怎么做 NAT66
    hez2010
        23
    hez2010  
       276 天前
    Windows 在 XP 之前还是暴露了完整的用户态操作 socket 网络栈的能力的,从 Vista 开始因为这么搞容易被病毒利用于是就把用户态能干的事情砍的剩不了多少了。
    现在如果你想自定义 Windows 的网络栈的话,可能唯一方法是编写 Windows 驱动。
    hez2010
        24
    hez2010  
       276 天前
    有一个简单的方法是你可以安装 npcap ,npcap 在 Windows 上实现了个自己的驱动,然后你利用 npcap 的 sdk 进行开发就能不需要碰内核态代码也能做到自己想做的东西。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   883 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 21:19 · PVG 05:19 · LAX 14:19 · JFK 17:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.