我在一台翻新的机器上安装了 Ubuntu 11.10。我还用一张新的 NIC 卡替换了有缺陷的 NIC 卡,安装时识别了两张 NIC 卡。我还安装了 squid 作为代理服务器。当所有工作站都连接到路由器时,Squid 工作正常。但是……
当我将一个 NIC 连接到我的路由器(有实时互联网连接),将另一个 NIC 连接到我的交换机(没有可用的互联网)时,我可以创建两个独立的网络,但我不知道如何让两个 NIC 卡在它们之间以及在两个网络之间传输数据。
- 我曾尝试桥接两个以太网卡...但没有成功!
- 我尝试更新 iptables...但没有成功!
- 我已将两个网卡都设置为静态地址...但没有成功!
- 我已经将一个 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 网络,并将数据包路由到那里。