IP地址分為公有ip地址和私有ip地址, Public Address是由INIC(internet network information center)負責的, 這些IP位址分配給了註冊並向INIC提出申請的組織機構。 Private Address屬於非註冊位址, 專門為組織內部使用。 Private Address是不可能直接用來跟WAN通信的, 要麼利用幀來通信(FRE框架轉送, HDLC,PPP),要麼需要路由的轉發(nat)功能把私有位址轉換為公有位址才行。
出於安全考慮, Linux系統預設是禁止資料包轉發的。 所謂轉發即當主機擁有多於一塊的網卡時, 其中一塊收到資料包, 根據資料包的目的ip位址將資料包發往本機另一塊網卡, 該網卡根據路由表繼續發送資料包。 這通常是路由器所要實現的功能。
1、通過訪問sysctl的內核ipv4.ip_forward來判斷轉發是否開啟。
說明:現在有些網路已經普及ipv6的, 所以下面的命令可以從ipv4改為ipv6即可
使用sysctl:
sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 0
或者檢查/proc下的檔:
cat /proc/sys/net/ipv4/ip_forward 0
ipv4轉發沒有開啟 (值為 0)
2、啟動IP轉發
通過sysctl可以開啟ipv4的轉發功能 (無需重啟):
sysctl -w net.ipv4.ip_forward=1
或者
echo 1 > /proc/sys/net/ipv4/ip_forward
這種設置只是暫時的, 它的效果會隨著電腦的重啟而失效。
通過在/etc/sysctl.conf設置參數:
如果想使IP轉發永久生效, 就請修改/etc/sysctl.conf , 在這裡可以增加一條net.ipv4.ip_forward = 1
/etc/sysctl.conf: net.ipv4.ip_forward = 1
如果ipv4轉發項已被設為0那麼你只需要將它改為1。
3、要想是更改生效, 你需要執行以下指令:
sysctl -p /etc/sysctl.conf
在紅帽系列的發行版本上可以通過重啟網路服務使之生效:
service network restart
而在Debian/Ubuntu系列的發行版本則用這樣的命令:
#早期版本
/etc/init.d/procps.sh restart
#最新版本
/etc/init.d/procps restart