Linux网关

发布于 2022-07-24 04:33:42 字数 221 浏览 17 评论 1

记得以前配置网关的时候总是写在/etc/sysconfig/network-scripts/ifcfg-ethx,

偶尔之间突然看到/etc/network中竟然也有Gateway=

请问配置网关到底是在ifcfg-ethx中配置,还是在Gateway? 假如两个地方都配置了,哪一个网关起作用?

由于暂时出差在外,没有环境来实验一下,但是又想马上知道,谢谢大家!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蔚蓝源自深海 2022-07-26 20:09:52

先看一下负责网络的 scripts
/etc/rc.d/init.d/network

  1. . /etc/sysconfig/network
  2.                 if LANG=C egrep -L "^ONBOOT=['"]?[Nn][Oo]['"]?" ifcfg-$i > /dev/null ; then
  3.                         # this loads the module, to preserve ordering
  4.                         is_available $i
  5.                         continue
  6.                 fi
  7.                 # If we're in confirmation mode, get user confirmation.
  8.                 if [ -f /var/run/confirm ]; then
  9.                         confirm $i
  10.                         test $? = 1 && continue
  11.                 fi
  12.                 action $"Bringing up interface $i: " ./ifup $i boot

复制代码
在开始的时候,引入了 /etc/sysconfig/network 里的变量,之后调用了 ifup

/sbin/ifup

  1.     # Set a default route.
  2.     if [ -z "${GATEWAYDEV}" -o "${GATEWAYDEV}" = "${REALDEVICE}" ]; then
  3.         # set up default gateway. replace if one already exists
  4.         if [ -n "${GATEWAY}" -a "`ipcalc --network ${GATEWAY} ${NETMASK} 2>/dev/null`" = "NETWORK=${NETWORK}" ]; then
  5.             ip route replace default via ${GATEWAY} ${WINDOW:+window $WINDOW} ${SRC} ${GATEWAYDEV:+dev $GATEWAYDEV}
  6.         elif [ "${GATEWAYDEV}" = "${DEVICE}" ]; then
  7.             ip route replace default ${SRC} ${WINDOW:+window $WINDOW} dev ${REALDEVICE}
  8.         fi
  9.     fi

复制代码
里面对 default gateway 进行了初始化,这里用的仍然是 GATEWAY 变量
由于 /etc/config/network 的网关变量与 /etc/config/network-scripts/ifcfg-ethx 的网关变量名一样
所以真正的 default gateway 会被最后的文件设置的内容所代替

所以答案是:若不一样的话,使用 ifcfg-eth0 设置的

有意思的是可以再做一个实验

  1. interfaces=`ls ifcfg* | LANG=C egrep -v '(ifcfg-lo|:|-range|rpmsave|rpmorig|rpmnew)' |
  2.             LANG=C egrep -v '(~|.bak)$' |
  3.             LANG=C egrep 'ifcfg-[A-Za-z0-9._-]+$' |
  4.             sed 's/^ifcfg-//g' |
  5.             sed 's/[0-9]/ &/' | LANG=C sort -k 1,1 -k 2n | sed 's/ //'`
  6.         for i in $interfaces; do
  7.                 action $"Bringing up interface $i: " ./ifup $i boot
  8.         done

复制代码
这是截取的 /etc/rc.d/init.d/network 的初始网卡的一部分代码
可以看到 ifup 的内容是个循环
根据上面的理论可以推断,若有 ifcfg-eth0 和 ifcfg-eth1,那么最后的 default gateway 应该是 ifcfg-eth1

我们来验证一下
/etc/sysconfig/network

  1. NETWORKING=yes
  2. HOSTNAME=CentOS
  3. GATEWAY=192.168.39.200

复制代码

/etc/sysconfig/network-scripts/ifcfg-eth0

  1. DEVICE=eth0
  2. ONBOOT=yes
  3. BOOTPROTO=static
  4. IPADDR=192.168.39.251
  5. NETMASK=255.255.255.0
  6. GATEWAY=192.168.39.254

复制代码

/etc/sysconfig/network-scripts/ifcfg-eth1

  1. DEVICE=eth1
  2. ONBOOT=yes
  3. BOOTPROTO=static
  4. IPADDR=192.168.40.251
  5. NETMASK=255.255.255.0
  6. GATEWAY=192.168.40.254

复制代码

重启后

  1. # ip r
  2. 192.168.39.0/24 dev eth0  proto kernel  scope link  src 192.168.39.251
  3. 192.168.40.0/24 dev eth1  proto kernel  scope link  src 192.168.40.251
  4. 169.254.0.0/16 dev eth1  scope link
  5. default via 192.168.40.254 dev eth1

复制代码

  1. # route -n
  2. Kernel IP routing table
  3. Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
  4. 192.168.39.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
  5. 192.168.40.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1
  6. 169.254.0.0     0.0.0.0         255.255.0.0     U     0      0        0 eth1
  7. 0.0.0.0         192.168.40.254  0.0.0.0         UG    0      0        0 eth1

复制代码
因而,验证了我上面的分析

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文