まずは先にubuntuを最新にしておきます。
sudo apt update && sudo apt upgrade -y
HAProxyのインストール
sudo apt install haproxy -y
/etc/haproxy/haproxy.cfg を編集します。例えば Minecraft サーバならこんな感じです。
# 接続ごとの制限テーブル(per_ip_connections)をバックエンドとして定義
backend per_ip_connections
stick-table type ip size 1m expire 1m store conn_cur,conn_rate(1m)
# Minecraft サーバへの接続を受け入れるフロントエンド
frontend fe_mcsv
mode tcp
bind *:25565
option tcplog
timeout client 1m
tcp-request content track-sc0 src table per_ip_connections
tcp-request content reject if { sc_conn_cur(0) gt 5 } || { sc_conn_rate(0) gt 10 }
default_backend be_mcsv
# バックエンド(実際に接続するサーバ)
backend be_mcsv
mode tcp
timeout server 1m
option tcp-check
server mcsv1 100.x.x.x:25565 maxconn 50 check
100.x.x.x:25565の部分は、tailscaleでvpnを張ったときのIPです。ここは自宅サーバのグローバルIPでもokeですが、ポート開放が必要になります。
sudo systemctl enable haproxy
sudo systemctl restart haproxy