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

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

我在一台翻新的机器上安装了 Ubuntu 11.10。我还用一张新的 NIC 卡替换了有缺陷的 NIC 卡,安装时识别了两张 NIC 卡。我还安装了 squid 作为代理服务器。当所有工作站都连接到路由器时,Squid 工作正常。但是……

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

  1. 我曾尝试桥接两个以太网卡...但没有成功!
  2. 我尝试更新 iptables...但没有成功!
  3. 我已将两个网卡都设置为静态地址...但没有成功!
  4. 我已经将一个 NIC 配置为使用另一个 NIC 作为网关... 没运气!所有结果都显示错误,即 ping 的地址(与交换机相关的网络)位于无法访问的目标。

我错过了什么?

答案1

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

net.ipv4.ip_forward = 1

那么它将在启动时被应用。

答案2

Ubuntu 默认禁用 IP 转发,您需要启用它才能使用您的机器路由数据包:

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

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

Obs:不适用于 sudo

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

编辑:

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

如果 eth0 是您的互联网连接 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

第二次更新-自动脚本:

#!/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

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

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

sudo update-rc.d router defaults

您需要检查的其他事项:

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

观察:update-rc.d 消息正常,没有问题。现在 ip_forward 文件中应该始终为 1。

答案3

我尝试了这个建议,但遇到了这里没有涉及的问题:下一台计算机必须知道如何回到上一台计算机。

就我而言,我有 2 个网络:一个 WiFi 网络,192.168.1.0/24,以及一个以太网网络,192.168.40.0/24。我的“路由器”是一台笔记本电脑,它既有 192.168.1.0/24 上的 WiFi 收发器,也有 192.168.40.0/24 网络上的以太网接口。家用路由器也有一个 WiFi 收发器和一个以太网接口,但这个以太网收发器连接到互联网。家用路由器还有一个网络地址转换器 (NAT)。家用路由器有一个路由表,该路由表有一个默认路由条目,通常指向互联网服务提供商 (ISP) 的路由器。

当 192.168.40.0/24 网络上的计算机想要向 Internet 上的某台计算机发送数据包时,它会查询自己的路由表并知道默认网关是笔记本电脑 192.168.40.1。当数据包到达笔记本电脑时,它会查询自己的路由表并将数据包转发到家用路由器。家用路由器查询其路由表,经过网络地址转换(我们可以忽略此讨论的细节),然后到达 ISP 的路由器。在某个时候,目标机器会想要向我的计算机发送数据包。数据包将到达家用路由器,经过反向 NAT,然后必须进行路由。当数据包从 NAT 出来时,它将在 192.168.40.0/24 网络中有一个目标 IPv4 地址。正是在这个时候,我遇到了一个问题:家用路由器不知道以太网网络 192.168.40.0/24。因此它做了它应该做的事情 - 将该数据包转发到其默认路由器,即 ISP 的路由器。

为了解决这个问题,我必须在家用路由器的路由表中输入一个条目,该条目告诉路由器,要访问 192.168.40.0/24 网络中的任何计算机,请将数据包发送到笔记本电脑的 WiFi 地址,即 192.168.1.0/24。现在,当数据包到达笔记本电脑时,笔记本电脑知道 192.168.40.0/24 网络,并将数据包路由到那里。

相关内容