giteaをdocker composeなどで起動したあと、独自のSSHポートでやっていきたいときがあります。普段のsshは22, giteaは222ポートなど。
~/.ssh/config
ファイルに下記を書けばポートを指定できます。
Host gitea.example.com
Hostname gitea.example.com
IdentityFile ~/.ssh/id_ed25519
Port 222
これでgitea.example.comからcloneするときは必ずPort222を使ってくれるようになります。
ここまでは非常に初歩的な内容ですが、さらに発展編。
192.168.0.10にメインサーバーがあるとします。こいつとは別に191.168.1.11というVLAN上にgiteaだけが入ったマシーンがあるとしましょう。(proxmoxでlxc上にdockerでgiteaサーバーを立てていると想定してください)
192.168.0.10マシーンは192.168.1.10のIPも持っていて、0番も1番も自由にアクセスできるマシーンだとしましょう。1番帯はfirewall的にoutだけは自由で、inは本当に最低限のポートしか公開していません。
このとき、192.168.0.10から、1.11の3000ポートにあるgiteaにnginxのreverse_proxyでアクセスさせるのは下記のようになります。
server {
listen 443 ssl;
server_name: git.example.com;
ssl_certificate file.crt;
ssl_certificate_key file.key;
access_log /var/log/nginx/git.example.com.access.log;
client_max_body_size 10M;
location / {
proxy_pass http://192.168.1.11:3000;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
}
}
これで外部に公開用のサーバーは0.10に限定して、1.11を外部から隔絶させることができますね。
このとき、どうやってSSHのポートをport forwardすれば良いのか?
いろんな方法があると思います(たとえばopnsenseのポートフォワード機能を使用する、など)。
僕が考えたのはHAProxyでポートフォワードをする方法です。こんな感じです。
HAProxyを192.168.0.10マシーンで実行します。cfgはこんな感じ。
defaults
mode tcp
frontend gitea_ssh
bind *:222
default_backend gitea_server
backend gitea_server
server gitea 192.168.1.11:222 maxconn 32
これで192.168.0.10の222ポートに来た通信を1.11の222にポートフォワードできます。ここで重要なのは、defaultsのmodeをtcpにすることです。こうしておかないとhttp通信をしようとして、うまくsshが繋げません。