使用IPV6进行SSH连接
背景:
在外访问家庭内网环境,作为内网穿透的代替方法
- 家庭内网为windows-wsl2环境,网络模式为镜像网络
- 外部访问设备为mac,使用5G移动网络
前提:
-
需要家庭网络支持ipv6
-
路由器防火墙放开ipv6限制
-
windows-wsl2设置ipv6防火墙规则
-
ICMP用于在IP主机、路由器等网络设备之间传递控制和错误消息,它并不直接传输用户数据,而是提供了网络层的通信机制,支持网络设备间的状态和错误信息的交换。用于ping命令测试网络连通性。
-
SSH用于远程连接
-
打开
终端管理员
,输入下面命令设置netsh advfirewall firewall add rule name="AAA-允许ICMPV6入站访问" dir=in action=allow protocol=icmpv6:8,any
netsh advfirewall firewall add rule name="AAA-允许访问22端口" dir=in action=allow protocol=tcp localport=22
-
查看
- 命令行。终端管理员
PS C:\Users\dit> netsh advfirewall firewall show rule name="AAA-允许访问22端口" 规则名称: AAA-允许访问9222端口 ---------------------------------------------------------------------- 已启用: 是 方向: 入 配置文件: 域,专用,公用 分组: 本地 IP: 任何 远程 IP: 任何 协议: TCP 本地端口: 22 远程端口: 任何 边缘遍历: 否 操作: 允许 确定。
- windows防火墙 -> 高级设置(名称设置为AAA,可以使规则排列在前排)
-
-
获取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),即网络前缀的长度。
-
xxxx:820c:xxxx:74e1:bdad:xxxx:ca5:8c22/64
:这个地址的掩码长度是/64。在IPv6中,/64通常用于指派给一个子网。这意味着这个地址属于一个较大的地址块,该块可以进一步划分为多个子地址用于各种目的,比如分配给不同的网络接口或服务。这是一个较为常见的配置,适合大多数常规网络连接需求。 -
xxxx:820c:xxxx:74e1:3489:xxxx:3614:7b0a/128
:这个地址的掩码长度是/128,意味着它是一个完整的、未经过子网划分的IPv6地址。在IPv6中,/128通常用于表示一个接口的唯一地址,不包含任何用于子网划分的部分。这样的地址直接指代一个特定的设备接口。
选择连接哪一个地址,通常取决于您的具体需求:
-
如果您需要连接到一个具有特定子网配置的网络服务,或者这是您设备的主要对外地址,那么您可能会倾向于使用/64的地址。因为/64地址更常见于一般的网络配置和通信。
-
如果您需要针对某个特定接口进行直接通信,或者有特殊配置要求指定了使用/128地址,那么您应该使用/128的地址。
在大多数普通应用场景下,您可能不需要手动选择,因为现代网络设备和操作系统会自动处理这些地址,并根据上下文环境(如DHCPv6或SLAAC等自动配置协议)选择合适的地址进行通信。如果不确定应该使用哪个,查看您的网络配置指南或咨询网络管理员会是比较好的选择。