# 宿主与虚拟机之间的网络问题
我们的两台宿主居然都 ping 不到虚拟机,导致后续 haproxy 代理转发后出现所有虚拟机 server 都是 down
状态
原因应该是宿主只有一个校园网网段的 ip,但是虚拟机只有实验室局域网网段的 ip
这个问题需要配置宿主节点的网络,可以在 PVE 控制面板修改 网络 / Network:
实际上就是编辑该节点的: /etc/network/interfaces
配置文件
应该需要配置虚拟网卡才能解决,但是我们的一台服务器有两张网卡(图中 eno1 eno2) 所以我们最后的解决方案给服务器插了多一条网线,配置该网卡 ip 为实验室局域网的 ip,从而该服务器连接上了虚拟机
# 安装 HAProxy
apt isntall haproxy |
或者源码编译安装
可快速上手学习、搜索问题的官网资料
# 配置 haproxy.cfg
编辑 /etc/haproxy/haproxy.cfg
配置文件,所需要的基本指令如下:
检查并重载配置文件
haproxy -f /etc/haproxy/haproxy.cfg |
仅检查:
haproxy -f /etc/haproxy/haproxy.cfg -c |
⚠️ 注意,文件最后需要有换行符结尾,否则会有报错:
Missing LF on last line, file might have been truncated at position xx |
重启 haproxy
服务
service haproxy restart | |
# or | |
systemctl restart haproxy |
配置由 5 部分组成,当然并不都是必须的: global
、 defaults
、 frontend
、 backend
、 listen
(可能还有更多)
我们的 SSH 代理转发需求只需配置 frontend
、 backend
即可,我们的配置如下:
frontend fe_ssh | |
bind *:2222 ssl crt /etc/pve/nodes/proxmox2/pveproxy-ssl.pem | |
mode tcp | |
log-format "%ci:%cp [%t] %ft %b/%s %Tw/%Tc/%Tt %B %ts %ac/%fc/%bc/%sc/%rc %sq/%bq dst:%[var(sess.dst)] " | |
tcp-request content set-var(sess.dst) ssl_fc_sni | |
use_backend %[ssl_fc_sni] | |
backend server1 | |
mode tcp | |
server s1 192.168.134.247:22 check | |
backend server2 | |
mode tcp | |
server s2 192.168.134.30:22 check | |
backend server3 | |
mode tcp | |
server s2 172.18.198.204:22 check |
- 其中
frontend
后面的fe_ssh
、backend
后面的server1
等都是自定义的名字; - 端口
bind *:2222
所指定的端口也是自定义的;跟在其后面的ssl crt /etc/pve/nodes/proxmox2/pveproxy-ssl.pem
是指定ssl
证书,该路径是 PVE 的通过上传的或用其提供插件自动申请的 ssl 证书所在路径。- haproxy 似乎只认定一个
xxx.pem
证书文件的对应 key 文件是xxx.pem.key
,所以 key 文件需要以这个形式命名放在 pem 相同路径上
- haproxy 似乎只认定一个
# SSH 连接
ssh -o ProxyCommand="openssl s_client -quiet -connect [服务器ip]:2222 -servername [servername]" -l [登陆虚拟机用的用户名] [虚拟机主机名] |
其中:
[服务器 ip] 即一般使用 ssh 登陆时的 @ 后面的 ip,或者主机名
[登陆虚拟机用的用户名] 即一般使用 ssh 登陆时的 @ 前面的用户名
[servername] 是
backend
指定的对应服务器名字,例如我们配置文件中的 server1 、 server2 、 server3[虚拟机主机名] 可以自定义,但是最后和虚拟机主机名一致,否则以后连接会出现这样的报错:
shell @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:fDBSRwFB552ZiUUmekpCWrbuSdh186h4c12JdrAQxTM.
Please contact your system administrator.
Add correct host key in /Users/xxx/.ssh/known_hosts to get rid of this message.
Offending ED25519 key in /Users/minamoto/.ssh/known_hosts:xx
Host key for xxx has changed and you have requested strict checking.
Host key verification failed.
即连接不同的虚拟机总是需要指定不同的主机名才不会产生冲突
# Dashboard
frontend stats | |
mode http | |
bind *:9000 | |
stats enable | |
stats uri /stats | |
stats refresh 10s | |
# stats uri /stats # choose a subpath for the dashboard | |
# stats admin if localhost # enable to restrict to localhost | |
# stats admin if 10.0.0.0/8 # enable to restrict to 10.x.x.x network sources | |
# stats admin auth <username:password> # enable to setup basic http auth |
目前发现每次修改配置文件后 dashboard 没有同步更新,除非修改 dashboard 配置的端口号,在新端口号才有同步更新了的数据
配置好后可以打开 http://node_ip:9000/stats
若想要 https 访问,则需要在 bind *:9000
后面加上 ssl 证书文件路径,否则只能 http 访问
bind *:9000 ssl crt /etc/pve/nodes/proxmox2/pveproxy-ssl.pem |
最终效果(图中用的是 9002 端口):
- reference1
- reference2