내 홈 서버에 GitLab을 설정하려고 합니다. HTTPS가 작동하고 GitLab의 인터페이스에 접근할 수 있지만 SSH는 작동하지 않으므로 서버에 코드를 푸시할 수 없습니다.
설정은 다음과 같습니다.
Cloudflare <--> Reverse Proxy (nginx, hosted on Digital Ocean) <--- VPN ---> Untangle Firewall <--> GitLab Server (on ESXi)
VPN 연결을 통해 역방향 프록시에서 GitLab 서버로 직접 SSH를 시도하면 완벽하게 작동합니다.
도메인 이름을 사용하여 노트북에서 SSH를 시도하면 다음과 같은 결과가 나타납니다.
kex_exchange_identification: Connection closed by remote host
Connection closed by 104.31.73.156 port 2095
역방향 프록시의 IP를 사용하여 노트북에서 SSH를 시도하면(따라서 Cloudflare가 중단됨) 다음과 같은 결과가 나타납니다.
Bad packet length 1231976033.
ssh_dispatch_run_fatal: Connection to {{ IP }} port 2095: message authentication code incorrect
현재 nginx 스트림 모듈을 사용하려고 하는데 스트림 설정은 다음과 같습니다.
stream {
upstream git-ssh {
server {{INTERNAL GITLAB IP}}:22;
}
server {
listen 2095;
proxy_pass {{INTERNAL GITLAB IP}}:22;
proxy_protocol on;
}
}
업스트림 git-ssh가 있는데 사용하지 않는 이유는 그것이 문제인지 궁금했기 때문이지만 사용 여부는 별 차이가 없습니다.
iptables에 익숙하지 않지만 다음 명령을 시도했습니다.
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 2095 -j DNAT --to-destination {{GITLAB IP}}:22
sudo iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 2095 -j SNAT --to-source {{PROXY IP}}
그러나 그것은 작동하지 않는 것 같았습니다. ssh는 아무 것도 반환하지 않고 결국 시간 초과됩니다.
UFW는 현재 테스트를 위해 프록시에서 비활성화되어 있으므로 아무 일도 일어나지 않습니다. 2095는 Cloudflare에 대해 승인된 포트입니다(https://support.cloudflare.com/hc/en-us/articles/200169156-Identifying-network-ports- Compatible-with-Cloudflare-s-proxy), 그래서는 안 됩니다. SSH는 GitLab 방화벽을 통해 허용되므로 그렇게 해서는 안 됩니다. 아직 DigitalOcean에 방화벽을 설정하지 않았으므로 그렇게 되어서는 안 됩니다.
나는 지금 길을 잃었고 누군가 나에게 조언을 해주길 바랐습니까?
답변1
신경쓰지 마세요. 완전히 마음에 드는 것은 아니지만 마침내 문제를 고칠 수 있었습니다.
내 스트림 구성에서 Proxy_protocol을 제거해야 했습니다.
Cloudflare는 계속해서 문제가 되었습니다. Cloudflare를 통해 호스트/프로토콜에 ssh -vvv를 실행하면 통과를 허용하는 대신 400 html 페이지를 반환하는 것으로 표시됩니다. 그래서 프록시를 사용하지 않고 Cloudflare 네트워크를 통한 트래픽을 허용하기 위해 새 레코드를 추가해야 했고, 이것이 바로 제가 수정한 내용이 완전히 만족스럽지 않은 이유입니다.
마지막으로, 각 프로젝트의 git 업스트림 원본을 수정할 필요가 없도록 ~/.ssh/config 파일을 편집하고 HostName 매개변수를 추가해야 했습니다.
프록시와 함께 Cloudflare를 계속 사용할 수 있는 더 나은 수정 사항이 있는 사람이 있다면 듣고 싶습니다.