1. 程式人生 > >開啟內核路由轉發使內網機器通過Gnu/Linux上網

開啟內核路由轉發使內網機器通過Gnu/Linux上網

cep 轉換 gen 測試 tina 機器 flag ipv4 5.1

問題描述

內網客戶機器通過一臺Gnu/Linux服務器訪問互聯網。服務器的eth0網卡可以訪問互聯網,eth1網卡與內網相連。客戶端要通過該服務端訪問互聯網。

實驗環境

服務器:
網卡 IP 子網掩碼 網關
eth0 192.168.16.220 255.255.255.0 192.168.16.1
eth1 192.168.15.222 255.255.255.0 192.168.15.1

客戶端:

網卡 IP 子網掩碼 網關
eth0 192.168.15.111 255.255.255.0 192.168.15.222

服務器與客戶端的配置

服務器端的配置

查看服務器上的路由表信息,

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.16.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.15.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U     0      0        0 eth1
0.0.0.0         192.168.16.1    0.0.0.0         UG    0      0        0 eth0

開啟服務器內核的路由轉發功能,使其具有路由功能

# echo 1 > /proc/sys/net/ipv4/ip_forward
# 或者使用下面的方式
# sysctl -w net.ipv4.ip_forward=1
# sysctl -p

最好修改/etc/sysctl.conf配置文件,使其配置永久生效。

配置NAT規則

經過第二部分配置後,雖然可以ping相關的IP地址,但是內網主機還是無法上網。問題在於內網主機的IP地址是無法在公網上路由的。因此,需要轉換成Linux系統主機可以上網的IP(註:這裏我們之所以不說是公網IP,是因為Linux系統可以直接上外網的IP同樣是內網IP。但是該內網IP(192.168.16.220)已經通過一些機制,實際上同樣是NAT的方式,可以訪問外網了,因此我們只需將Host A的IP轉換成Linux系統eth0接口的IP即可)。

以下是我們配置的NAT規則:

# iptables -t nat -A POSTROUTING -s 192.168.15.0/24 -o eth0 -j SNAT --to-source 192.168.16.220
# iptables -A FORWARD -i eth1 -j ACCEPT

客戶端的配置

客戶端的設置比較簡單,客戶端的網關IP地址為服務器內網IP地址,DNS與服務器的一樣即可。

測試

如果客戶端可以ping的通www.baidu.com,則說明內網可以訪問互聯網。

開啟內核路由轉發使內網機器通過Gnu/Linux上網