장애 조치 게이트웨이의 SSH 연결 문제

장애 조치 게이트웨이의 SSH 연결 문제

SSH와 HTTP를 통해 액세스할 수 있는 시스템이 있습니다. 시스템에는 두 개의 인터페이스(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를 발표하면 고객이 이를 사용하기 시작할 것으로 기대할 수 있습니다.

답변2

100% 확신할 수는 없지만... 두 개의 NIC가 있고 각각 자체 네트워크가 있습니다. "기본 게이트웨이"가 로 설정된 192.168.1.1/24경우 전자에 대한 액세스가 허용되지 않습니다 172.16.0.0/17. 이는 활성화/허용되어야 하는 기능입니다. 네트워크를 통과할 때 라우팅에 대해 이야기하고 있습니다. 따라서 다음 설정을 지정하거나 브리지를 설정하십시오.

echo 1 > /proc/sys/net/ipv4/ip_forward

작동하는 경우 다음을 수행하여 영구적으로 만드십시오.

/etc/sysctl.conf:
net.ipv4.ip_forward = 1
sysctl -p /etc/sysctl.conf
service network restart

관련 정보