我的家庭网络中的虚拟机上的 docker-compose 中有一个 GitLab 实例。
它在 HAProxy 代理后面运行,并且可以通过 访问git.example.com:443
。
为了能够在我的家庭网络内部和家庭网络外部访问它们,我必须让 DNS 指向git.example.com
HAProxy 地址。
因此,当我尝试通过 SSH 连接到 时git.example.com
,它会尝试通过 SSH 连接到代理服务器。
因此,我尝试将其转发,以便如果有人尝试通过 SSH 连接ssh.git.example.com:22
(或端口 443),它会将其重定向到media.lan.example.com:4002
,因为端口4000
/ 4001
/分别4002
是 docker 用于容器的端口80
/ 443
/ 22
。
我该如何实现这一点?能够在端口22
或443
上使用 SSH,而ssh.git.example.com
无需客户端更改其任何配置。
我的 HAProxy 配置:
frontend http
bind example.com:80
reqadd X-Forwarded-Proto:\ http
mode http
use_backend gitlab-backend if { hdr(host) -i git.example.com }
frontend https
bind example.com:443 ssl crt /certs/cert.pem
mode http
use_backend gitlab-backend if { hdr(host) -i git.example.com }
backend gitlab-backend
redirect scheme https if !{ ssl_fc }
server gitlab1 media.lan.example.com:4001 ssl check verify none
mode http
backend gitlab-ssh-backend
redirect scheme https if !{ ssl_fc }
mode tcp
server gitlabssh1 media.lan.example.com:4002 check
frontend gitlab-ssh-frontend
bind ssh.git.example.com:443 ssl crt /certs/cert.pem
use_backend gitlab-ssh-backend
mode tcp