Ubuntu 設置NAT共享網絡(命令行方法)


  本文介紹如何使用iptables來實現NAT轉發,事實上就是將一台機器作為網關(gateway)來使用。我們假設充當網關的機器至少有網卡eth0和eth1,使用eth0表示連接到外網的網卡,使用eth1表示連接到內網交換機上的網卡,內部子網為10.0.0.0,通過NAT機制,內網中的機器可以通過網關機器訪問Internet,而不需要額外的公網IP。

  本文中的配置值需要根據具體環境適當更改。

一、Gateway端

  1. 給內網網卡配置靜態IP(此前確保另一張外網網卡eth0已經能夠正常訪問Internet。已經為eth1配置過內網靜態IP的可以跳過本步)

sudo ip addr add 10.0.0.11/24 dev eth1

  這里假設eth1的IP為10.0.0.11,。

  2. 配置NAT規則

sudo iptables -A FORWARD -o eth0 -i eth1 -s 10.0.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -F POSTROUTING
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

  第一條規則允許轉發初始網絡包,第二條規則允許轉發已經建立連接后的網絡包,第三條則設置NAT。

  接下來需要保存iptables規則,確保每次重啟時能夠加載NAT規則:

  2.1 保存iptables規則

sudo iptables-save | sudo tee /etc/iptables.sav

  2.2 編輯/etc/rc.local文件,將下面的一行添加到“exit 0”之前:

iptables-restore < /etc/iptables.sav

  這樣以后每次重啟機器時都會自動加載NAT相關的iptables規則。  

  3 啟用路由轉發,編輯/etc/sysctl.conf 文件,刪除起始的“#”,解除

#net.ipv4.ip_forward=1

  的注釋。然后使其生效:

sudo sysctl -p

  這樣我們就完成了網關一端的設置。

二、Client端

  一旦網關機器設置完成,任何OS的客戶端都能夠通過連接到網關而訪問外部網絡。這里以Ubuntu Server作為client為例,假設client的eth0連接到網關eth1所在的內網10.0.0.0上,

  1. 為eth0指派靜態IP(需與server端的eth1在同一網段,如果已經配置過則可以跳過本步),編輯/etc/network/interfaces文件:

auto eth0
iface eth0 inet static
        address 10.0.0.31
        netmask 255.255.255.0
        gateway 10.0.0.11
        dns-nameservers YourDNSServer

  因為我們的網關服務端並沒有充當DNS服務器,此處需要額外指定client的DNS服務器,通常從網絡服務提供商(ISP)那里獲得。

  2. 接下來配置路由網關

sudo route add default gw 10.0.0.11 dev eth0

  使網關配置生效,如果以前已經生成過/etc/resolv.conf文件中的nameserver字段,那么這時client應該已經能夠訪問外部網絡了,否則需要編輯/etc/resolv.conf,添加字段:

nameserver YourDNSServer

  由於在/etc/network/interfaces文件中已經配置過dns-nameservers,所以重新啟動client機器時不會影響DNS配置。

  此時client已經能夠通過網關機器訪問外網,如果不知道ISP的DNS服務器地址,可以使用OpenDNS作為替代。

三、高級Gateway配置

  可以為gateway機器配置DHCP和DNS服務器功能,從而簡化客戶端機器的聯網配置,同時省卻為client配置DNS的過程;

  1. 安裝dnsmasq

sudo aptitude install dnsmasq

  2. 備份dnsmasq的配置文件以備參考

sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf-backup

  3. 編輯dnsmasq的配置文件/etc/dnsmasq.conf,添加下面兩行:

interface=eth1
dhcp-range=10.0.0.100,10.0.0.250,72h

  注意這是為gateway機器配置DHCP/DNS,interface字段需要設為該機器連接到內網的那個網卡,同時DHCP的IP池應該在我們之前配置的那個網段中。

  4. 重啟dnsmasq服務

sudo /etc/init.d/dnsmasq restart

  這樣client端就能夠獲取動態IP和自動解析域名了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM