IP轉發
操作系統擁有 IP轉發(英語:IP forwarding)功能,意味着該系統能接收從接口傳送進來的 網絡數據包(英語:network packets),如果識別到該數據包不用於該系統自身,那麼系統將會將該網絡數據包傳送到另外一個網絡去,用恰當地方式轉發該數據包。[1]
一個典型的場景是需要去搭建一個路由器以連接兩個不同網絡。
路由表
當一個IP數據包抵達系統後,系統將根據該數據包的目的地址來決定是否轉發該數據包,以及轉發到何處。路由表提供了目的地址和轉發目標(下一跳)之間的對應關係。
在大多數操作系統上可用netstat -r
命令查看路由表,route命令修改路由表。
由於默認情況下系統僅通過IP數據包的目的地址來決定轉發方式,對於一些路由器配置場景來說,僅配置路由表存在局限。此時應額外採用策略路由來更靈活地配置路由規則。
啟用/禁用IP轉發
Linux
可通過設置sysctl項net.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
可通過設置sysctl項net.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.0 1.1 What is and how do I enable IP forwarding on Linux?. OpenVPN. [2020-03-19]. (原始內容存檔於2020-03-19).
- ^ Coranth Gryphon. FreeBSD 使用手册. FreeBSD Documentations. The FreeBSD Documentation Project: 32.2.4. 建立路由器. 2020-12-24 [2021-06-12] (中文(簡體)).
這個選項會把sysctl(8) 變量――net.inet.ip.forwarding 設置成 1。
- ^ ifconfig(1M). man pages section 1M: System Administration Commands. Oracle. 2014 [2021-06-12] (英語).
- ^ Enabling Packet Forwarding. Configuring and Administering Network Components in Oracle® Solaris 11.2. Oracle. 2014 [2021-06-12] (英語).