我有一个可以通过 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
当你说传入您的意思是来自已打开到本地主机上的 SSH(或 HTTP)服务的远程 Internet 客户端的连接吗?
如果是,外部 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