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

有了 ipv6 地址就可以直连了吗?

  •  
  •   FaiChou ·
    FaiChou · 9 小时 42 分钟前 · 1263 次点击

    在这样的网络下,双方 OpenWrt 负责 pppoe 拨号上网,下发 ipv6 地址,OP 另一个网口连接着电脑。电脑有 ipv6 地址。OpenWrt 的防火墙 FORWARD 链默认是 DROP 的,没有添加其他防火墙设置。

    这样双方有 ipv6 地址就可以直连了吗?算 p2p 吗?经过我的测试,a 电脑起一个 server python3 -m http.server 8080 --bind ::,然后 b 电脑使用 ipv6 地址+端口是无法访问的。

    只有在 a 电脑的 OpenWrt 防火墙下转发一下,才可以正常访问。

    但是,双方电脑都使用 tailscale 组网的情况下,双方是可以通过 ipv6 直连的。通过 tailscale ping 就可以看到 pong from b (100.64.0.4) via [2408:xxxx:xxx:xxx::9c8]:35973 in 8ms

    connection

    我不理解,为什么 tailscale ( WireGuard )是可以做到直连的?双方电脑上建了个虚拟网卡进行连接,但是电脑的上一级是 OpenWrt ,OpenWrt 网口 1 收到数据包后发现不是自己的数据包,要转发给网口 2 ,所以也需要走 FORWARD 链吧?这样的话,默认 DROP 应该阻止连接。那 tailscale 又是怎么突破这一限制的?

    14 条回复    2024-11-27 22:53:50 +08:00
    MissTang
        1
    MissTang  
       9 小时 35 分钟前
    可能运营商策略不同?
    我这里是从公司电脑 mstsc 到 家里 电脑 mstsc
    直接 ipv6 没问题
    i8086
        2
    i8086  
       9 小时 7 分钟前
    1. OpenWrt pppoe 拨号,运营商给得 ipv4 和 ipv6 都是属于这个设备,而不是你内网的电脑,需要转发很正常。
    2. 电脑有 ipv6 地址。没贴地址是什么,无法解答。
    3. tailscale 是隧道组网,双方电脑就处于同一个局域网,双方电脑都没网络防火墙的情况,当然是互通。
    FaiChou
        3
    FaiChou  
    OP
       9 小时 2 分钟前
    @i8086
    "3. tailscale 是隧道组网,双方电脑就处于同一个局域网,双方电脑都没网络防火墙的情况,当然是互通。"
    组的局域网,但是数据包肯定是流经了 OpenWrt 来转发到电脑的,数据包既然流经了 OpenWrt ,那就要走 OpenWrt 的防火墙吧?
    Danswerme
        4
    Danswerme  
       7 小时 34 分钟前
    OpenWrt 的 FORWARD 链默认 DROP ,我的理解是从 WAN 口进来和内部设备建立连接的数据包会被 DROP ; 而 TailScale 是由电脑主动发起对 TailScale 服务器的请求的,由于连接已经建立,TailScale 服务器从 WAN 口进来转发给电脑的数据包不会被阻断。

    但是我记得 TailScale 走的是 UDP 吧,打洞成功之后和其他设备怎么握手以及防火墙怎么处理的我就不明白了。
    kk2syc
        5
    kk2syc  
       7 小时 30 分钟前
    op 的 v6 防火墙规则里必须放行对应设备和端口,
    FaiChou
        6
    FaiChou  
    OP
       7 小时 27 分钟前
    @Danswerme

    A 电脑使用 ipv6 连接到 B 电脑的过程中,B 电脑的上一级是 Openwrt ,OpenWrt 有两个网口,网口 1 和网口 2 ,网口 2 是和 B 电脑相连。当 A 连接 B 时候,数据包到达 OpenWrt 的网口 1 ,根据路由表发现需要转发到 B 电脑,于是将数据包转发给网口 2 。这时候数据包在 OpenWrt 上两个网口的转发,是不是要经过 FORWARD 链呢?但 tailscale 的虚拟网卡只是设备端的,比如 B 电脑中的,在 OpenWrt 上并不知道是什么样的流量,只知道目标 ip 是 B 电脑,所以要进行转发。我的理解是这样的。
    但实际上,使用了 tailscale 可以进行 ipv6 直连,不知道它怎么做到流量可以透过 FORWARD 链的。
    JensenQian
        7
    JensenQian  
       7 小时 24 分钟前
    哪些是打洞的

    你 openwrt 还有运营商的光猫入栈都打开
    FaiChou
        8
    FaiChou  
    OP
       7 小时 13 分钟前
    @JensenQian 不管是打不打洞,B 电脑收到的数据包先是经过 OpenWrt 的口,然后再转发到另一个网口,再发到 B 电脑吧。但是 ipv6 直连的话,在经过网口转发的过程中,会触发防火墙的 FORWARD 链吧。默认 drop 会拒绝的。所以 tailscale 是怎么绕过这防火墙的?
    goodryb
        9
    goodryb  
       6 小时 43 分钟前
    @FaiChou #8 这个好像就是打洞的原理

    你那种直接起服务,是外部主动发起连接; tailscale 好像是两边都先连接服务器,在防火墙上建立起状态,后面利用这个直接通信

    具体可以找资料看看,我大概记得是这样
    FaiChou
        10
    FaiChou  
    OP
       6 小时 30 分钟前
    @goodryb 你说得这个我理解,电脑先连接一下 derp 服务器,比如使用 1234 端口和 derp 服务器进行了连接,这样自己的 1234 端口就打开了,然后其他的设备就可以使用 1234 端口和这台电脑交流。如果 ipv4 中是严格的(Symmetric) NAT ,那么其他的设备无法直连它,因为源地址不同,NAT 会拒绝这些来源请求。如果是 Full Cone NAT 的话可以直接 p2p 连接,NAT 不会限制来源 ip 。

    但这是 ipv6 就没有 NAT 的事了。数据包总是先到达 OpenWRT 的网口 1 ,然后转发到网口 2 。这里的转发就应该有防火墙的限制。
    COW
        11
    COW  
       4 小时 48 分钟前 via Android
    @FaiChou 我理解,这些都是 wireguard 加密后的数据,openwrt 解不了,就直接路由给虚拟网卡 tun 接口了,解密是客户端完成的,其实压根没走防火墙。
    Ipsum
        12
    Ipsum  
       4 小时 35 分钟前
    op 后面没接交换机? forward 是 drop v4 还是 v6 ?
    dalaoshu25
        13
    dalaoshu25  
       4 小时 34 分钟前   ❤️ 2
    你说的 FORWARD 链是 DROP ,那么是双向都 DROP 还是默认从 WAN 过来的新链接 DROP ?咱能不能先去搞清楚最基本的概念?
    imaohua
        14
    imaohua  
       3 小时 45 分钟前
    可以直接连到家里的电脑。在的路由防火墙上放行内部对应的 ipv6 端口。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1152 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 18:39 · PVG 02:39 · LAX 10:39 · JFK 13:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.