ロードバランサーのセットアップがあり、HTTPSリクエストは次の手順で流れます。-
Client -> DNS -> stunnel on Load-Balancer -> HAProxy on LB -> Web-Server
この設定は、stunnelがLoad-BalancerのローカルIPをリッスンしているときに完全に機能します。
ただし、このセットアップでは2つのロードバランサーがあり、一度に1つのLBにのみ存在する仮想IPをリッスンできるようにする必要があります(最初のLBがフォールオーバーした場合、keepalivedはIPを2番目のLBにフリップします)。
HAProxyはこれを行うのに問題はありません(そして、テストしているロードバランサーで割り当てられた仮想IPにpingを実行できます)が、stunnelはこの概念を嫌っているようです。
誰かが以前にこれを達成したことがありますか(以下は私のstunnel構成です-あなたが見ることができるように、私は実際に443ですべてのトラフィックをリッスンしています):-
cert= /etc/ssl/certs/mycert.crt
key = /etc/ssl/certs/mykey.key
;setuid = nobody
;setgid = nogroup
pid = /etc/stunnel/stunnel.pid
debug = 3
output = /etc/stunnel/stunnel.log
socket=l:TCP_NODELAY=1
socket=r:TCP_NODELAY=1
[https]
accept=443
connect=127.0.0.1:8443
TIMEOUTclose=0
xforwardedfor=yes
長い質問でごめんなさい!
重要なのは、存在しないインターフェースをプログラム(stunnel、HA-proxyなど)にバインドできるようにすることです。そのため、keepalivedが仮想IPをそのボックスにフリップすると、プログラムはすでにそのインターフェイスでトラフィックをリッスンして待機しています。
これは、次のキーと値のペアを含めることで/etc/sysctl.conf
を変更することで実行できます。
net.ipv4.ip_nonlocal_bind=1
次に、stunnelとHA-proxyの設定を変更して、特定の仮想インターフェイスIPへのバインドをハードコーディングするのが最善の方法です。 「開いた」ままにするのではなく。