TCP/IPv6 通过 ssh 隧道

10 linux ssh ipv6

我想知道如何通过 ssh/ipv4 隧道(ptp 连接)传输 tcp/ipv6 流量。是否可以?我怎样才能做到这一点?

Jul*_*ano 16

是的,这是可能的,而且不太困难,但解决方案非常次优,因为 SSH 运行在 TCP 上并且具有合理的开销。

服务器的配置文件中必须有sshd_config

PermitTunnel point-to-point
Run Code Online (Sandbox Code Playgroud)

然后,您需要在两台机器上都是root 。您使用以下方法连接到服务器:

ssh -w any root@server
Run Code Online (Sandbox Code Playgroud)

连接后,ip link在两个系统中使用该命令可以知道每个系统中创建了哪个tunN设备,并在以下命令中使用它。请注意,我使用的示例站点本地地址已过时,但对于本介绍来说还可以。

在服务器上:

server# ip link set tun0 up
server# ip addr add fec0:1::1/112 dev tun0
Run Code Online (Sandbox Code Playgroud)

在客户端:

client# ip link set tun0 up
client# ip addr add fec0:1::2/112 dev tun0
Run Code Online (Sandbox Code Playgroud)

如果没有防火墙规则阻止,这足以使您可以通过隧道 ping 另一端。下一步是设置隧道上的路由(不要忘记 net.ipv6.conf.default.forwarding=1),然后调整链路 MTU 以获得最佳性能。

server# sysctl net.ipv6.conf.all.forwarding=1

client# ip -6 route add default via fec0:1::1
Run Code Online (Sandbox Code Playgroud)

这将允许您的客户端 ping 服务器有权访问的其他网络,前提是目标具有返回远程客户端的路由。

您还必须修复链接 MTU,以便客户端不会发送服务器无法转发的数据包。这取决于服务器本身的 IPv6 链路的 MTU。不要依赖路径 MTU 发现,因为它无法通过 SSH 隧道正常工作。如果有疑问,请从低 MTU 值开始,例如 1280(IPv6 允许的最小 MTU)。

  • OS X 没有 `ip` 命令,因此使用 `sudo ifconfig tun0 inet6 fec0:1::2/112 up` 设置 ip 地址并使用 `sudo route add -inet6 -mtu 1280 default fec0` 设置路由: 1::1` (2认同)