如何實現兩個本地介面之間的資料轉發?

如何實現兩個本地介面之間的資料轉發?

我在翻新機上安裝了 Ubuntu 11.10。我還用新的 NIC 卡更換了有缺陷的 NIC 卡,安裝時識別到了兩張 NIC 卡。我還安裝了魷魚作為代理伺服器。當所有工作站都連接到路由器時,Squid 可以正常運作。然而 ... 。

當我將一個網卡連接到我的路由器(可用實時互聯網連接),將另一個網卡連接到我的交換機(沒有任何可用的互聯網)時,我可以創建兩個獨立的網絡,但我不知道如何使兩個網卡傳輸它們之間以及兩個網路之間的資料。

  1. 我嘗試過橋接兩個以太網卡...但沒有成功!
  2. 我嘗試過更新 iptables ...沒有運氣!
  3. 我已將兩個 NIC 卡設定為靜態位址...不走運!
  4. 我已將一個網卡設定為使用另一個網卡作為網關...不走運!所有這些都會導致錯誤,即 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 是您的網際網路連線網路卡,則 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 通第二個網卡,但從哪裡?子網,你的機器還是直接連接在路由器上的機器?
  • 你的機器上安裝了squid嗎?您是否更改了配置以包含新子網路?你需要魷魚嗎?它的配置並不容易,如果您不需要它的附加功能,您可以在沒有它的情況下很好地共享互聯網和網路。

Obs: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)。家庭路由器有一個路由表,並且該路由表有一個預設路由條目,該條目通常指向 Internet 服務提供者 (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 網絡,並將資料包路由到那裡。

相關內容