背景:

在外访问家庭内网环境,作为内网穿透的代替方法

  • 家庭内网为windows-wsl2环境,网络模式为镜像网络
  • 外部访问设备为mac,使用5G移动网络

前提:

  1. 需要家庭网络支持ipv6

    1. ipv6测试
  2. 路由器防火墙放开ipv6限制

  3. windows-wsl2设置ipv6防火墙规则

    1. ICMP用于在IP主机、路由器等网络设备之间传递控制和错误消息,它并不直接传输用户数据,而是提供了网络层的通信机制,支持网络设备间的状态和错误信息的交换。用于ping命令测试网络连通性。

    2. SSH用于远程连接

    3. 打开终端管理员,输入下面命令设置

      1. netsh advfirewall firewall add rule name="AAA-允许ICMPV6入站访问" dir=in action=allow protocol=icmpv6:8,any
      2. netsh advfirewall firewall add rule name="AAA-允许访问22端口" dir=in action=allow protocol=tcp localport=22
    4. 查看

      1. 命令行。终端管理员
      PS C:\Users\dit> netsh advfirewall firewall show rule name="AAA-允许访问22端口"
      
      规则名称:                             AAA-允许访问9222端口
      ----------------------------------------------------------------------
      已启用:                               是
      方向:                                 入
      配置文件:                             域,专用,公用
      分组:
      本地 IP:                              任何
      远程 IP:                              任何
      协议:                                 TCP
      本地端口:                            22
      远程端口:                           任何
      边缘遍历:                             否
      操作:                                 允许
      确定。
      
      1. windows防火墙 -> 高级设置(名称设置为AAA,可以使规则排列在前排)
  4. 获取ipv6地址

    # 家庭内网wsl2环境,使用镜像网络,网络地址和windows系统地址一致
    $ ip addr
    3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether c8:7f:54:c5:d5:68 brd ff:ff:ff:ff:ff:ff
        inet 192.168.0.10/24 brd 192.168.0.255 scope global noprefixroute eth0
           valid_lft forever preferred_lft forever
        inet6 xxxx:820c:xxxx:74e1:bdad:xxxx:ca5:8c22/64 scope global nodad deprecated noprefixroute
           valid_lft forever preferred_lft 0sec
        inet6 xxxx:820c:xxxx:74e1:3489:xxxx:3614:7b0a/128 scope global nodad noprefixroute
           valid_lft forever preferred_lft forever
    # xxxx:820c:xxxx:74e1:bdad:xxxx:ca5:8c22/64
    # xxxx:820c:xxxx:74e1:3489:xxxx:3614:7b0a/128
    

连接:

模拟在外环境,使用5G移动网络或者支持ipv6的无线/ 有线连接,访问开启ipv6的家庭内网

# ping
➜ ping6  xxxx:820c:xxxx:74e1:bdad:xxxx:ca5:8c22   
PING6(56=40+8+8 bytes) xxxx:820c:xxxx:74e1:bdad:xxxx:ca5:8c22 --> xxxx:820c:xxxx:74e1:bdad:xxxx:ca5:8c22
16 bytes from xxxx:820c:xxxx:74e1:bdad:xxxx:ca5:8c22, icmp_seq=0 hlim=49 time=35.369 ms
16 bytes from xxxx:820c:xxxx:74e1:bdad:xxxx:ca5:8c22, icmp_seq=1 hlim=49 time=35.168 ms

# ssh
➜ ssh xx@xxx:xxxx:820c:xxxx:74e1:3489:xxxx:3614:7b0a
Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.146.1-microsoft-standard-WSL2 x86_64)

如上所示,表示连接成功!

其他:

1. 两个ipv6地址的区别

这两个IPv6地址代表您的设备在网络上的不同标识。它们的主要区别在于地址的掩码长度(prefix length),即网络前缀的长度。

  1. xxxx:820c:xxxx:74e1:bdad:xxxx:ca5:8c22/64:这个地址的掩码长度是/64。在IPv6中,/64通常用于指派给一个子网。这意味着这个地址属于一个较大的地址块,该块可以进一步划分为多个子地址用于各种目的,比如分配给不同的网络接口或服务。这是一个较为常见的配置,适合大多数常规网络连接需求。

  2. xxxx:820c:xxxx:74e1:3489:xxxx:3614:7b0a/128:这个地址的掩码长度是/128,意味着它是一个完整的、未经过子网划分的IPv6地址。在IPv6中,/128通常用于表示一个接口的唯一地址,不包含任何用于子网划分的部分。这样的地址直接指代一个特定的设备接口。

选择连接哪一个地址,通常取决于您的具体需求:

  • 如果您需要连接到一个具有特定子网配置的网络服务,或者这是您设备的主要对外地址,那么您可能会倾向于使用/64的地址。因为/64地址更常见于一般的网络配置和通信。

  • 如果您需要针对某个特定接口进行直接通信,或者有特殊配置要求指定了使用/128地址,那么您应该使用/128的地址。

在大多数普通应用场景下,您可能不需要手动选择,因为现代网络设备和操作系统会自动处理这些地址,并根据上下文环境(如DHCPv6或SLAAC等自动配置协议)选择合适的地址进行通信。如果不确定应该使用哪个,查看您的网络配置指南或咨询网络管理员会是比较好的选择。