如何启用两个本地接口之间的数据转发?

Jim*_*fer 3 server networking 11.10

我已经在翻新的机器上安装了 Ubuntu 11.10。我还用新的 NIC 卡更换了有缺陷的 NIC 卡,安装时识别了两个 NIC 卡。我还安装了鱿鱼作为代理服务器。当所有工作站都连接到路由器时,Squid 运行良好。然而 ... 。

当我将一个 NIC 连接到我的路由器(实时互联网连接可用),另一个 NIC 连接到我的交换机(没有任何互联网可用)时,我可以创建两个独立的网络,但我不知道如何让这两个 NIC 卡传输它们之间以及两个网络之间的数据。

  1. 我试图桥接两个以太网卡......不走运!
  2. 我曾尝试更新 iptables ......不走运!
  3. 我已将两个 NIC 卡都设置为静态地址……不走运!
  4. 我已经配置了一个 NIC 来使用另一个作为网关......不走运!所有这些都会导致 ping 地址(与交换机相关的网络)位于无法到达的目的地的错误。

我错过了什么?

Mih*_*dis 6

@laurent 描述的脚本是不必要的,因为有一种规范的方式。您需要做的就是编辑/etc/sysctl.conf并取消注释(#在开头删除)这一行:

net.ipv4.ip_forward = 1
Run Code Online (Sandbox Code Playgroud)

然后它就已经在启动时应用了。


lau*_*ent 5

Ubuntu 默认禁用了 ip 转发,您需要启用它以通过您的机器路由数据包:

要启用,请以 root ( sudo su)身份输入终端:

echo 1 > /proc/sys/net/ipv4/ip_forward

Obs:不适用于 sudo

如果你想从这台机器路由互联网,你可能还需要配置 NAT。

编辑:

第一个命令echo 1 ...不适用于 sudo。您必须使用sudo subefore更改为 root (因为 sudo 将以 root 身份运行 echo 1 但会尝试以您的用户身份重定向到该文件,这将不起作用)。无论如何,您总是可以检查是否有 1 和cat /proc/sys/net/ipv4/ip_forward. Obs:这必须在每次启动时完成,以便您可以编写脚本并在其上使用 update-rc.d。

如果 eth0 是您的 Internet 连接 NIC,则 POSTROUTING 规则看起来不错。

我用于已建立和相关连接的 FORWARD 规则:

-A FORWARD -p tcp -m state -d your_network_ip.0/255.255.255.0 --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -p udp -m state -d your_network_ip.0/255.255.255.0 --state RELATED,ESTABLISHED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

第二次更新 - 自动脚本:

#!/bin/sh
# turn ip_forward on/off

case "$1" in
'start')
        echo 1 > /proc/sys/net/ipv4/ip_forward
        ;;
'stop')
        echo 0 > /proc/sys/net/ipv4/ip_forward
        ;;
*)
        echo "Usage: $0 { start | stop }"
        ;;
esac
exit 0
Run Code Online (Sandbox Code Playgroud)

/etc/init.d使用您想要的名称(router例如)保存此脚本并使其可执行 ( sudo chmod +x /etc/init.d/router)。

要在每次重新启动时运行它,您需要使用 update-rc.d 建立启动链接:

sudo update-rc.d router defaults
Run Code Online (Sandbox Code Playgroud)

您必须检查的其他事项:

  • DHCP 在第二个网络上工作并将您的机器 IP 作为默认网关发送到子网
  • 默认网关(您在新子网中的机器 IP)使用固定 IP 更好
  • 你评论说你不能 ping 第二个网卡,但从哪里?子网,你的机器或直接连接在路由器上的机器?
  • 你的机器上安装了squid?您是否更改了配置以包含新子网?你需要鱿鱼吗?它不是很容易配置,如果您不需要它的附加功能,您可以在没有它的情况下很好地共享互联网和网络。

Obs:update-rc.d 消息没问题,没问题。您现在应该在 ip_forward 文件中始终为 1。

  • 这是如何使用 `sudo` 设置转发: `echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward` 或者如果你喜欢:`sudo tee /proc/sys/net/ipv4/ip_forward <<< 1`(后者需要一个 shell,比如支持 here-strings 的 Bash )。 (3认同)