运行 Wireguard 会禁用计算机的 SSH 访问

运行 Wireguard 会禁用计算机的 SSH 访问

我有一台机器 C,我可以从机器 B 通过 SSH 进入它。但是当 C 使用 Wireguard 通过机器 A 连接到互联网时,我无法再从 B 通过 SSH 进入它。我该怎么办?

答案1

这是因为您现在不再位于您创建的私有网络 10.0.0.x 上。

你有两个选择,一个从机器 A ssh 到机器 B,或者用 wireguard 连接机器 C 和 B,然后 ssh 连接,
然后你必须启用 ip 转发:

# echo 1 > /proc/sys/net/ipv4/ip_forward
# /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# /sbin/iptables -A FORWARD -i eth0 -o wg0 -m state --state RELATED,ESTABLISHED 
 -j ACCEPT
# /sbin/iptables -A FORWARD -i wg0 -o eth0 -j ACCEPT

现在您可以从 C 进行 ssh

参考IP 转发NAT

答案2

这是我在 Google 上搜索“wireguard ssh 无法连接”的第一个结果之一,因此这里有一个可行的简单修复方法。在将 ssh 服务器连接到 wireguard 服务器之前,在 ssh 服务器上运行此命令:

ip route add <ssh_client_pub_ip> via <ssh_server_default_gateway> dev <ssh_server_pub_interface>

ssh_客户端发布地址- ssh 客户端的公共 IP 地址,你可以使用以下命令获取curl ifconfig.me

ssh_server_pub_interface- 公共接口的名称。只要您只有一个网络接口,您就应该能够执行此操作ip route show default | awk '{ print $5; exit }',但如果没有,您可以安全地对其进行硬编码,因为它不太可能改变

ssh_server_default_gateway- ssh 服务器(wireguard 客户端)公共接口的默认网关。您可以使用以下命令获取ip route | grep default | awk '{print $3}'

现在,您可以将 AllowedIps 设置为 0.0.0.0/0 来连接到 wireguard 对等体,而不会丢失 SSH 连接!之所以能成功,是因为此命令通过默认网关向您的 ssh 客户端添加了一条静态路由,然后当 wireguard 添加其规则以将流量定向到所有 IP 时,流向 ssh 客户端的流量将例外。

您可以在它前面放置一个反向代理,然后就可以了,但至少您可以在排除故障时顺利通过 SSH 进入。我在使用wireguard AllowedIPs 计算器在这里,它同时还提供了一个超级方便的计算器来帮助您从 AllowedIPs 中排除地址,同时还建议您考虑首先为 SSH 客户端的流量添加静态路由,看看是否可以解决问题。

相关内容