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