IP轉發

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書

作業系統擁有 IP轉發(英語:IP forwarding功能,意味著該系統能接收從介面傳送進來的 網路封包(英語:network packets),如果辨識到該封包不用於該系統自身,那麼系統將會將該網路封包傳送到另外一個網路去,用恰當地方式轉發該封包。[1]

一個典型的場景是需要去搭建一個路由器以連接兩個不同網路。

路由表[編輯]

當一個IP封包抵達系統後,系統將根據該封包的目的位址來決定是否轉發該封包,以及轉發到何處。路由表提供了目的位址和轉發目標(下一跳)之間的對應關係。 在大多數作業系統上可用netstat -r命令檢視路由表,route命令修改路由表。

由於預設情況下系統僅通過IP封包的目的位址來決定轉發方式,對於一些路由器組態場景來說,僅組態路由表存在局限。此時應額外採用策略路由來更靈活地組態路由規則。

啟用/停用IP轉發[編輯]

Linux[編輯]

可通過設定sysctlnet.ipv4.ip_forward為1來啟用IPv4轉發。在大多數的發行版中,可以修改組態檔案/etc/sysctl.conf來持久化設定該sysctl項,例如:[1]

編輯 /etc/sysctl.conf 檔案:

nano /etc/sysctl.conf

添加該行內容 或 去除注釋該行內容:

net.ipv4.ip_forward=1

退出並儲存,執行改行命令。

sysctl -p

上述方式,將會永久性地啟動IP轉發,並且立即生效。

BSD[編輯]

可通過設定sysctlnet.inet.ip.forwarding為1來啟用IPv4轉發,設定net.inet6.ip6.forwarding為1來啟用IPv6轉發。

要永續性啟用IP轉發,可將該sysctl設定加入/etc/sysctl.conf檔案;對於FreeBSD系統,應在/etc/rc.conf中設定gateway_enabled="YES"來持久地啟用轉發。[2]

Solaris[編輯]

Solaris系統中啟用或停用IP轉發的設定一般是針對各個介面的,可通過ifconfig命令來臨時更改某個介面的轉發設定。[3]例如要臨時地在介面bge0上啟用轉發:

ifconfig bge0 router

反之如要停用轉發:

ifconfig bge0 -router

要持久地啟用或停用IPv4或IPv6轉發,應使用ipadm(1M)命令。[4] 例如要更改全域轉發設定,使用:

ipadm set-prop -p forwarding={on|off} {ipv4|ipv6}

或者更改某個介面的轉發設定,使用:

ipadm set-ifprop -m {ipv4|ipv6} -p forwarding={on|off} <interface>

以啟用bge0上的IPv4轉發為例:

ipadm set-ifprop -m ipv4 -p forwarding=on bge0

內容擴充[編輯]

可通過 英文維基的IP routing 進行內容擴充。

參考文獻[編輯]


  1. ^ 1.0 1.1 What is and how do I enable IP forwarding on Linux?. OpenVPN. [2020-03-19]. (原始內容存檔於2020-03-19). 
  2. ^ Coranth Gryphon. FreeBSD 使用手册. FreeBSD Documentations. The FreeBSD Documentation Project: 32.2.4. 建立路由器. 2020-12-24 [2021-06-12]. (原始內容存檔於2021-06-12) (中文(簡體)). 這個選項會把sysctl(8) 變數――net.inet.ip.forwarding 設定成 1。 
  3. ^ ifconfig(1M). man pages section 1M: System Administration Commands. Oracle. 2014 [2021-06-12]. (原始內容存檔於2021-06-12) (英語). 
  4. ^ Enabling Packet Forwarding. Configuring and Administering Network Components in Oracle® Solaris 11.2. Oracle. 2014 [2021-06-12]. (原始內容存檔於2021-06-12) (英語).