下一页 上一页 目录

3. 设置 Linux 以提供服务

3.1 设置桥接

我们需要 Linux 知道关于桥接的信息。首先告诉它我们想要一个虚拟以太网桥接口:(这当然要在主机 bridge 上执行。参见 测试环境

root@bridge:~> brctl addbr br0
        
其次,我们不需要 STP(生成树协议)。也就是说,我们只有一个路由器,因此环路不太可能发生。我们可以停用此功能。(也会减少网络环境的污染)
root@bridge:~> brctl stp br0 off
        
在这些准备工作之后,我们现在终于执行一些有效的命令。我们添加我们的两个(甚至更多)物理以太网接口。这意味着,我们将它们连接到刚刚诞生的逻辑(虚拟)桥接接口 br0
root@bridge:~> brctl addif br0 eth0
root@bridge:~> brctl addif br0 eth1
        
重要提示

有人给我发邮件说,如果我更清楚地强调被切断连接的风险,那将对他们有所帮助。所以现在请听取我的警告
如果你正在阅读本文,那么你离切断自己与即将用作桥接设备的盒子的连接只有一步之遥(很小的一步)。
如果你喜欢走在技术前沿,那么现在是准备急救物品的时候了。你很可能需要它。
如果你无法进行物理访问,你的范围内也没有其他人可以物理访问
在你的手指离开你面前的键盘,并且你的眼睛反射性地注视着控制台以外的其他东西之前,不要继续操作。
现在,你已经被警告过了。对任何事情都不承担任何责任。

现在,我们之前两个物理以太网接口都变成了逻辑桥端口。嗯,好吧,物理设备一直都在,并且会一直都在。它们仍然在那里,去看看吧 ;-) 但现在它们已成为逻辑桥设备的一部分,因此不再需要 IP 配置。所以释放这些 IP。
root@bridge:~> ifconfig eth0 down
root@bridge:~> ifconfig eth1 down
root@bridge:~> ifconfig eth0 0.0.0.0 up
root@bridge:~> ifconfig eth1 0.0.0.0 up
        
很好!我们现在有一个没有附加任何 IP 地址的盒子。所以,如果你之前是通过 TP 配置你未来的防火墙/路由器,现在去使用你的本地控制台吧 ;-)) 你有串口控制台吗?幸运儿 :-)
可选

我们告诉 Linux 新的(逻辑)接口,并为其关联一个 IP 地址。

root@bridge:~> ifconfig br0 10.0.3.129 up
        

完成了。
阅读 重要提示!

3.2 设置路由

如果我们要配置网关,我们需要在 Linux 内核中启用转发。

root@bridge:~> echo "1" > /proc/sys/net/ipv4/ip_forward
        
我们的盒子已经分配了 IP 地址,但没有默认路由。我们现在解决这个问题。
root@bridge:~> route add default gw 10.0.3.129
        
最后,我们应该有一个从网关发出、到达网关以及通过网关工作的网络。

3.3 让它再次发生!

也就是:我们需要这些更改在重启后仍然保留。
为此,你需要一些 sh 风格的脚本,并将它放在适当的系统启动目录中:/etc/init.d/
其次,你在运行级别目录中创建链接。正确的目录取决于你的喜好,当然也取决于你的 Linux 发行版。工作站上常见的运行级别值为 2、3 和 5。例如:/etc/rc?.d/(将 ? 替换为正确的运行级别)
此外,你需要了解你的网络接口何时被启动。目前,我们假设你的网络接口以系统优先级 S 激活,因此我们无需担心。如果你需要确切地知道,请查看 /etc/rcS.d/。我们只是希望桥接尽快启动并可操作,因此选择优先级为 10。(确保在之前没有启动需要桥接设备的服务,即优先级值小于 10 的服务)
目前,我们假设你的运行级别是 5

root@bridge:~> mv -i bridge.sh /etc/init.d/
root@bridge:~> cd /etc/rc5.d/
root@bridge:~> ln -s ../init.d/bridge.sh S10bridge.sh
        
几乎所有发行版都为你提供一些运行级别检查器或等效工具,以帮助你完成管理运行级别链接的繁琐工作。请查阅你的发行版文档。
提示:Debian 有 update-rc.d,Red Hat 及其后续版本有 chkconfig。最后,SuSE 显然也有自己的工具(我不容易记住名字..)。
想知道 bridge.sh 的内容吗?;-)
#!/bin/bash
PATH="/sbin:/usr/sbin:/usr/local/sbin";
slaveIfs="1 2 3 4 6 7 8 9 10";
cmd="$1";
[ -z "$cmd" ] && cmd="start";
case "$cmd" in
  start)
    brctl addbr br0;
    brctl stp br0 on;
    brctl addif br0 eth0;
    brctl addif br0 eth1;
    (ifdown eth0 1>/dev/null 2>&1;);
    (ifdown eth1 1>/dev/null 2>&1;);
    ifconfig eth0 0.0.0.0 up;
    ifconfig eth1 0.0.0.0 up;
    ifconfig br0 10.0.3.129 broadcast 10.0.3.255 netmask 255.255.255.0 up ### Adapt to your needs.
    route add default gw 10.0.3.129; ### Adapt to your needs.
    for file in br0 eth0 eth1;
    do
      echo "1" > /proc/sys/net/ipv4/conf/${file}/proxy_arp;
      echo "1" > /proc/sys/net/ipv4/conf/${file}/forwarding;
    done;
    echo "1" > /proc/sys/net/ipv4/ip_forward;
    ;;
  stop)
    brctl delif br0 eth0;
    brctl delif br0 eth1;
    ifconfig br0 down;
    brctl delbr br0;
    #ifup eth0; ### Adapt to your needs.
    #ifup eth1; ### Adapt to your needs.
    ;;
  restart,reload)
    $0 stop;
    sleep 3;
    $0 start;
    ;;
esac;
        
并且,是的,使其可执行..
root@bridge:~> chmod 700 /etc/init.d/bridge.sh
        
最后,确保你的桥接在无人值守的重启后仍然存在。这和备份的故事一样:你应该在需要它之前测试它。


下一页 上一页 目录