如何从非控制节点通过SSH访问OpenStack(MicroStack)实例?
解决WSL访问MicroStack实例浮动IP的方案
根据你的场景,控制节点S1能正常访问实例,但WSL无法直接连接,核心问题是WSL所在的本地网络没有路由到MicroStack的浮动IP网段,或者需要通过端口转发来绕过路由限制。下面提供两种可靠的实现方式,都需要先开启S1的IP转发功能:
第一步:开启S1的IP转发(必须操作)
首先让S1具备路由转发能力,这是NAT/路由功能的基础:
# 临时开启(重启后失效) sudo sysctl -w net.ipv4.ip_forward=1 # 永久生效,写入配置文件 echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf sudo sysctl -p
方法一:添加静态路由(推荐,直接访问浮动IP)
这种方式让WSL直接把浮动IP网段的流量指向S1,就能像S1一样直接SSH到10.20.20.100。
1. 确认S1的本地网络IP
先在S1上查看连接本地网络的网卡IP(比如eth0或ens33):
ip addr show eth0
假设得到的IP是192.168.1.20(替换成你实际的S1本地IP),MicroStack浮动IP网段是10.20.20.0/24。
2. 在WSL中添加路由
打开WSL终端,执行:
sudo ip route add 10.20.20.0/24 via 192.168.1.20 dev eth0
如果WSL重启后路由消失,可以把这条命令加到WSL的启动脚本里(比如~/.bashrc)。
3. 配置S1防火墙允许转发
如果S1用ufw防火墙,执行:
sudo ufw allow in on eth0 to 10.20.20.0/24 sudo ufw allow out on br-ex to 10.20.20.0/24 sudo ufw reload
如果用iptables,执行:
sudo iptables -A FORWARD -i eth0 -o br-ex -d 10.20.20.0/24 -j ACCEPT sudo iptables -A FORWARD -i br-ex -o eth0 -s 10.20.20.0/24 -j ACCEPT
完成后,你就可以在WSL中直接执行:
ssh 10.20.20.100
方法二:端口转发(无需修改路由)
如果不想配置路由,也可以通过S1做端口转发,把S1的某个端口映射到实例的SSH端口(22)。
1. 设置iptables端口转发规则
在S1上执行:
# 将S1的2222端口转发到实例10.20.20.100的22端口 sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 2222 -j DNAT --to-destination 10.20.20.100:22 # 配置返回流量的SNAT,确保实例能正确回包 sudo iptables -t nat -A POSTROUTING -o br-ex -j MASQUERADE
如果要让规则永久生效,可以安装iptables-persistent保存规则:
sudo apt install iptables-persistent sudo netfilter-persistent save
2. 在WSL中通过S1端口访问
现在你可以在WSL中通过S1的本地IP和转发端口连接实例:
ssh -p 2222 <实例用户名>@192.168.1.20
替换<实例用户名>为你实例中的实际用户名(比如ubuntu)。
注意事项
- 确保实例的防火墙允许SSH访问(你已经能从S1访问,所以这步应该没问题)
- 如果S1的本地IP是动态的,方法一的路由需要手动更新;方法二不受影响,但要注意S1IP变化后修改WSL的SSH命令
内容的提问来源于stack exchange,提问作者blintso
相关产品推荐
相关产品推荐

