フェールオーバーゲートウェイのSSH接続の問題

フェールオーバーゲートウェイのSSH接続の問題

SSHとHTTP経由でアクセスできるシステムがあります。システムには2つのインタフェース(eth0、eth1)があり、Slackware 14.1を使用しています。

eth0:192.168.1.99、LTEイーサネットゲートウェイ/モデムeth1:172.16.101.250、ローカルネットワーク(インターネット接続可能)

eth1は発信トラフィックのデフォルトパスとして使用され、eth1を介してインターネットアクセスが利用できない場合は自動的にeth0に切り替える必要があります。この部分はcronとスクリプトを使って動作します。

主な問題は、デフォルトゲートウェイを切り替えると、SSHおよびHTTPへの着信トラフィックがデフォルトゲートウェイのインターフェイスでのみ機能することです。

/etc/rc.d/rc.inet1.conf

# Config information for eth0:
IPADDR[0]="192.168.1.99"
NETMASK[0]="255.255.255.0"
USE_DHCP[0]="no"
DHCP_HOSTNAME[0]="bridge"

# Config information for eth1:
IPADDR[1]="172.16.101.250"
NETMASK[1]="255.255.128.0"
USE_DHCP[1]="no"
DHCP_HOSTNAME[1]="bridge"

# Default gateway IP address:
GATEWAY="172.16.0.1"

毎分スクリプトを実行して、両方のネットワークでインターネットの可用性を確認します。

#!/bin/bash

DEF_GATEWAY="172.16.0.1"      # Default Gateway
BCK_GATEWAY="192.168.1.1"     # Backup Gateway
RMT_IP_1="8.8.8.8"            # first remote ip
RMT_IP_2="8.8.4.4"            # second remote ip
PING_TIMEOUT="1"              # Ping timeout in seconds

# Check user
if [ `whoami` != "root" ]
then
        echo "Failover script must be run as root!"
        exit 1
fi

# Check GW
CURRENT_GW=`ip route show | grep default | awk '{ print $3 }'`
if [ "$CURRENT_GW" == "$DEF_GATEWAY" ]
then
        ping -c 2 -W $PING_TIMEOUT $RMT_IP_1 > /dev/null
        PING=$?
else
        # Add static routes to remote ip's
        ip route add $RMT_IP_1 via $DEF_GATEWAY
        ip route add $RMT_IP_2 via $DEF_GATEWAY
        ping -c 2 -W $PING_TIMEOUT $RMT_IP_1 > /dev/null
        PING_1=$?
        ping -c 2 -W $PING_TIMEOUT $RMT_IP_2 > /dev/null
        PING_2=$?

        # Del static route to remote ip's
        ip route del $RMT_IP_1
        ip route del $RMT_IP_2
fi

if [ "$PING" == "1" ] && [ "$PING_2" == "1" ]
then
        if [ "$CURRENT_GW" == "$DEF_GATEWAY" ]
        then
                ip route replace default via $BCK_GATEWAY
        fi

elif [ "$CURRENT_GW" != "$DEF_GATEWAY" ]
then
        # Switching to default
        ip route replace default via $DEF_GATEWAY
fi

リスニングサービスです

# netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 *:http                  *:*                     LISTEN     
tcp        0      0 *:auth                  *:*                     LISTEN     
tcp        0      0 *:ssh                   *:*                     LISTEN     
tcp        0      0 *:https                 *:*                     LISTEN     
tcp        0      0 *:time                  *:*                     LISTEN     
tcp6       0      0 [::]:ssh                [::]:*

これがルーティングテーブルです

# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         172.16.0.1      0.0.0.0         UG    1      0        0 eth1
loopback        *               255.0.0.0       U     0      0        0 lo
172.16.0.0      *               255.255.128.0   U     0      0        0 eth1
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0

ベストアンサー1

言うと着信localhostのSSH(またはHTTP)サービスに開いているリモートインターネットクライアントの接続を意味しますか?

それでは、外部IPアドレスは何ですか?インターフェイスごとに違うと思います。この場合、ゲートウェイ ルータによって NAT エントリと NAT 接続のタイムアウトの問題が発生する可能性があります。

着信接続の外部パブリックパスを制御することはできません。特に接続が開かれた後はさらにそうです。指定されたインターフェイスの接続が失われると、そのインターフェイスへのすべての接続がタイムアウトします(時々接続とルーティングがタイムアウトする前に復元されない限り)。

たとえば、リモートクライアントがSSHサービスへの接続に使用するDNSを制御できる場合、それらが使用するIPをある程度合理的に制御できます。新しい接続、ある程度合理的なフェイルオーバー間の時間(例:少なくとも300秒)後ろに新しいIPを発表すると、顧客はそれを使い始めることを期待できます。

おすすめ記事