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を発表すると、顧客はそれを使い始めることを期待できます。