免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2077 | 回复: 1
打印 上一主题 下一主题

Linux网关 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-19 23:17 |只看该作者 |倒序浏览
记得以前配置网关的时候总是写在/etc/sysconfig/network-scripts/ifcfg-ethx,

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

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

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

论坛徽章:
0
2 [报告]
发表于 2006-10-20 08:57 |只看该作者
先看一下负责网络的 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
复制代码

因而,验证了我上面的分析
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP