Есть два хоста: один с белым ip и доменом, на другом хостится гитлаб – на первом стоит nginx для реверс прокси, оба хоста сидят в впн. Проблема заключается в git over ssh, я спроксировал ssh от первого сервера ко второму:
# Proxy ssh for gitlab
stream {
upstream gitlab_ssh {
server v.v.v.v:22;
}
server {
listen 22;
proxy_pass gitlab_ssh;
}
}
На первом сервере 22 порт свободный, а на втором висит sshd.
Но в логах подключения вижу ip сервера, который проксирует трафик, а я хотел еще fail2ban поставить, а в такой ситуации он мне прокси сервер будет блокировать. Нашел такое решение. Но оно не работает, во-первых если добавить proxy_protocol on;
, то ssh на конечном хосте пожалуется:
kex_exchange_identification: client sent invalid protocol identifier "PROXY TCP4 x.x.x.x y.y.y.y 59742 22" ## Вот тут четко вижу ip клиента (x.x.x.x) и ip прокси (y.y.y.y)
А на строку set_real_ip_from $proxy_protocol_addr;
ругается сам nginx:
host not found in set_real_ip_from "$proxy_protocol_addr" in /etc/nginx/nginx.conf:72
Еще пробовал добавлять proxy_bind $remote_addr;
, но тут опять
bind(x.x.x.x) failed (99: Cannot assign requested address) while connecting to upstream, client: x.x.x.x, server: 0.0.0.0:22, upstream: "v.v.v.v:22", bytes from/to client:0/0, bytes from/to upstream:0/0
Добавил net.ipv4.ip_nonlocal_bind=1
, но теперь сеть недостижима
[error] 1019147#1019147: *1687228 connect() to v.v.v.v:22 failed (101: Network is unreachable) while connecting to upstream, client: x.x.x.x, server: 0.0.0.0:22, upstream: "v.v.v.v:22", bytes from/to client:0/0, bytes from/to upstream:0/0
Подскажите, пожалуйста, что я делаю не так?