怎樣使用linux的iptables工具進行網路共享
術語字彙
- 私有IP地址(路由不可達地址)是一個被用於本地區域網的IP地址(在互聯網中不可見)。
- 公用IP地址(路由可達地址)是一個在互聯網中可見的IP地址。
- IP偽裝是一項允許一系列機器通過MASQ網關連接互聯網的功能。這些MASQ網關之外的機器在互聯網中是不可見的。MASQ之後的機器中任何流入或流出的數據必須經過MASQ網關。
- 網路地址轉換(NAT)是一項通過IP偽裝技術可以使私有IP地址訪問互聯網的功能。
Hardware Requirements
硬體要求
- 一台有兩個介面(一個公有IP地址和其他的私有IP地址)的linux主機,這個主機將被用作網關。
- 一台或者多台擁有私有IP地址的linux/windows系統的PC或者筆記本。
- 交換機/集線器(可選)。
教程步驟
接下來的過程需要在linux主機(用於共享的網關)上完成。
1、激活IP轉發
為了設置網路共享,你需要在linux主機上更改一個內核參數來使能IP轉發功能。內核啟動參數設定在/etc/sysctl.conf文件中。
打開這個文件,定位到含有"# net.ipv4.ip_forward = 0"的這一行,移除#號(即取消注釋),然後將其值設置為1,改好之後應該和下面的一致。
net.ipv4.ip_forward = 1
你還要使激活IP轉發功能生效,通過執行下面的命令:
$ sudo sysctl -w net.ipv4.ip_forward=1
$ sudo sysctl -p
2、NAT配置
另一個網路共享的重要部分是NAT配置,這可以通過使用iptables的命令,iptables包含四個防火牆的規則表:
- FILTER (默認表格)
- NAT
- MANGLE
- RAW
這個教程中我們將僅使用兩個表格:FILTER和NAT表格。
首先,刷新所有活躍的防火牆的規則。
$ sudo iptables -X
$ sudo iptables -F
$ sudo iptables -t nat -X
$ sudo iptables -t nat -F
在輸入表格中,你需要設置轉發鏈(FORWARD)成可接受的(ACCEPT)目的地,因此所有通過主機的數據包將會被正確的處理。
$ sudo iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$ sudo iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
在NAT表中,你必須為你的WAN口啟用IP偽裝功能,我們假設WAN口協議是ppp0。為了在ppp0介面上使能IP偽造技術,我們使用以下的命令:
$ sudo iptables -t nat -I POSTROUTING -o ppp0 -j MASQUERADE
3、配置私有IP地址
在linux主機上的所有配置完成後,你需要配置其他設備(linux/windows的PC或筆記本)的DNS伺服器以及默認網關,讓它們的數據流可以指向linux主機。注意你不需要在linux主機上設置一個DNS伺服器,從其他設備發出的每一個DNS請求都會通過上游的ISP自動轉發到linux主機上。
如果你的其他設備上用的系統是linux,你可以通過以下命令來更改他們的默認網關和DNS伺服器。假設你的網段是192.168.1.0/24的私有IP地址網段,linux主機上綁定的IP地址是192.168.1.1。
$ sudo ip route del default
$ sudo ip route add default via 192.168.1.1
$ sudo sh -c "echo 'nameserver 192.168.1.1' > /etc/resolv.conf"
如果還有其他的linux設備,那麼你可以重複以上命令。
如果你有windows設備,你可以通過控制面板的網路連接屬性來更改默認網關和DNS伺服器。
4、完整的腳本
這是一個在linux主機上設置網路連接共享的一個完整的腳本。WAN口(ppp0協議)需要根據你具體的網路介面協議來替換。
$ sudo vi /usr/local/bin/ishare
#!/bin/bash
## Internet connection shating script
sysctl -w net.ipv4.ip_forward=1
sysctl -p
iptables -X
iptables -F
iptables -t nat -X
iptables -t nat -F
iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -I POSTROUTING -o ppp0 -j MASQUERADE
保存以上的腳本為/usr/local/bin/ishare,然後添加可執行許可權通過執行下面的命令。
$ sudo chmox +x /usr/local/bin/ishare
如果你需要這個腳本開機啟動,你需要在/etc/rc.local文件中執行這個腳本,並在該文件中的"exit 0"之前添加下面一行。
/usr/local/bin/ishare
via: http://xmodulo.com/2014/06/internet-connection-sharing-iptables-linux.html
譯者:yujianxuechuan 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive