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

代理环境下的 IPv6 源 IP

  •  
  •   journalist · 308 天前 via iPhone · 2721 次点击
    这是一个创建于 308 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在设备 A 上运行代理软件,这个软件具体是什么不太重要,B 通过某种方式将流量发送给 A ,可以是 socks5 ,tproxy ,tun 或者其他什么方式。A 的代理程序看了一下,决定直连出站,这个时候 B 访问的目标 C 看到的源 IP 是 A 的而不是 B 的。

    具体的表现就是访问 test-ipv6.com ,显示 A 的 IP 。这算是一种 NAT 吗,有没有什么方法在直连的时候不改变(或者改回去)源地址?

    我现在的做法是把想要直连的 IP 段写进防火墙规则,但是这就丢失了代理软件可以快速切换规则的便利性。

    Network Address Translation (NAT) and Proxies (part 2)

    15 条回复    2024-02-25 20:27:39 +08:00
    yyzh
        1
    yyzh  
       308 天前 via Android
    没有.直连吧
    ysc3839
        2
    ysc3839  
       308 天前 via Android
    理论可行,但实际很可能不行。方法是 A 发包时源地址设置成 B 的地址,这样目标服务器发回包时会直接发给 B
    ysc3839
        3
    ysc3839  
       307 天前 via Android
    @ysc3839 还没写完,不小心点到回复了。
    但是实际上运营商很可能限制 A 发出包的源地址必须是 A 的地址,上述操作发出去的包会被直接丢弃。
    SenLief
        4
    SenLief  
       307 天前
    你这个分流应该在 A 上做,而不是 B 上。
    leonshaw
        5
    leonshaw  
       307 天前 via Android
    pagxir
        6
    pagxir  
       307 天前 via Android
    你需要在 dns 那边就做分流而不是在代理应用那边。
    pagxir
        7
    pagxir  
       307 天前 via Android
    dns 分流可以在网关实现,不影响便利性。
    kokutou
        8
    kokutou  
       307 天前 via Android
    各种客户端软件都是 a 上面分流啊

    a 上面可以拿到进程,域名,
    b 上面首先就没进程,而且可能域名都没得就只有 ip
    mantouboji
        9
    mantouboji  
       307 天前
    这个涉及到你 IPv6 部分的路由分流是怎么做的。

    就我自己而言,无论 v4 还是 v6 全是靠 OSPF 分流,境外的 IPv4 和 v6 流量都走 wireguard 隧道出去,所以访问境外 v6 网站看到的源地址就是我境外 VPS 的 v6 地址,访问境内 v6 网站看到的是我 PPPoE 得到的那个地址。

    这没什么啊。实际上因为境内 IPv6 路由的不完备,而且 v6 路由上也要经过墙,这样折腾实际上比纯走国内 v6 路由要快一点点。
    icaolei
        10
    icaolei  
       307 天前
    你只要把流量给 A 的代理程序了,就是 A 在访问 C 了。你要做的是 B 来决定哪些直连,哪些发给 A 去代理。
    luoshengdu
        11
    luoshengdu  
       307 天前
    先试试用 DNS 分流,这个部署成本低,并且不改变网络架构。
    https://github.com/pmkol/easymosdns

    功能说明:
    *支持 EDNS 解析,根据域名与中国大陆 IP 列表智能分流,查询结果无污染*
    *强化 Hosts 功能,域名支持多个 IP ,支持 IPv6*
    *支持指定 ECS ,强制域名附带指定的 ECS 解析*
    journalist
        12
    journalist  
    OP
       307 天前
    怎么都在说 DNS ,我这里只考虑直接访问 IP 的情况
    journalist
        13
    journalist  
    OP
       307 天前
    @mantouboji 是这样的,你说的没错。
    journalist
        14
    journalist  
    OP
       307 天前
    假设设置运行代理的机器为网关,代理程序判断是否直连显然是在应用层,而实际上直连的流量没必要进入应用层,在网络层直接转发给下一跳就可以了。如果代理程序能在流量进入 INPUT 之前就进行判断,是不是就可以达到源 IP 不变的目的?
    tavimori
        15
    tavimori  
       307 天前
    @journalist 要使设备 A 使用 B 的地址作为源地址向服务器建立连接,那么目标 C 返回的包的目的地址就是 B 的地址。

    如果设备 A 使用 socks5 ,tproxy 等代理技术,那么设备 A 必须能够拦截到目标 C 返回的发给 B 的包,并重新以代理响应的方式返回给 B ,这就要求目标 C 发给 B 的包在网络中一定得经过设备 A 。此外在 A 上实现这个功能也比较怪异,例如 socket 要绑定非本机 IP ,并且可能要注入一个特定的 ebpf 程序来劫持目标 C 返回的特定包。

    也有一些特殊的做法可以满足你的要求,例如一个叫做 dae 的代理软件使用 ebpf 来过滤直连的流量,只要确保不启用 SNAT ,就可以实现你需要的功能。这类代理软件在处理直连的流量时行为完全与路由器是一致的。https://github.com/daeuniverse/dae/blob/main/docs/zh/how-it-works.md
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1001 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 23:26 · PVG 07:26 · LAX 15:26 · JFK 18:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.