Linux – NAT + Routing

Loading

nat_dhcp_routing

前提 : 前同事留下的環境有一部份的環境是給實驗室 (172.16.0.x) 用的,以及公司辦公室所使用的網段 (10.1.1.x) , 要換成新設備但搞半天用不起來.

想說在新 server 裝 Linux 然後 Routing 設定一下就可以了,但發現從 172.16.0.x 的網路是可以通往 10.1.1.x ,但 10.1.1.x Router 卻不認識 172.16.0.x,但我沒有辦法去設定公司的 Router 所以 GG 了.只能額外想辦法做,想到以前有用 server 設定成分享器給大家上網 就是要上網 – 3.5G 篇,方式應該也差不多.

所以解決方案就是在 Linux 下 同時設定 NAT + Routing,恩那 NAT + Routing 誰會先生效,因為 Routing 比較上層(決定封包要從哪個埠出去),所以會先生效,當 Routing 指定哪一個網路埠出去後,接著該埠會依據 NAT 的規則出去.

Note:
Windows 也有支援 IP Forwarding , Routing + NAT ,在 Windows 2016 的 Server Manager console / Add roles and features – Server Roles (點選 Remote Access) / Remote Access – Roles Services (點選 Routing).

所以規則是這樣,當有資料發出來的時候 Routing 會決定是從 172.16.0.x 還是 10.1.1.x 出去

  1. 如果是 172.16.0.x 就直接透過 172.16.0.3
  2. 而要去 10.1.1.x 的會透過 NAT 偽裝.

設定 NAT + Routing 步驟如下:

  • 先來設定 NAT
    打開 Linux 下 iptables 的 NAT.ubuntu 預設沒開啟 ip_forward (會將網路埠1的封包轉到網路埠2 ,一樣會把網路埠2轉到網路埠1) 首先編輯 /etc/sysctl.conf

    [root@benjr ~]# cat /proc/sys/net/ipv4/ip_forward
    

    如果為 0 表示沒有啟動,須透過下面的方式來啟動.

    [root@benjr ~]# vi /etc/sysctl.conf
    net.ipv4.ip_forward=1
    net.ipv6.conf.default.forwarding=1
    [root@benjr ~]# sysctl -p
    

    NAT 的規則也很簡單,收到 172.16.0.0 的封包透過 eth0 (10.1.1.1) 偽裝 出去到

    [root@benjr ~]# iptables -t nat -A POSTROUTING -s 172.16.0.0/255.255.0.0 -o eth0 -j MASQUERADE
    [root@benjr ~]# iptables -A FORWARD -s 172.16.0.0/255.255.0.0 -o eth0 -j ACCEPT
    [root@benjr ~]# iptables -A FORWARD -d 172.16.0.0/255.255.0.0 -m state --state ESTABLISHED,RELATED -i eth0 -j ACCEPT
    
  • 關於 Routing 設定
    透過 route add 來新增 Routing 規則,至要是 172.16.0.0 的封包,透過 gateway 172.16.0.3 (eth1) 出去,如果是 10.1.1.0 (eth0) 則是透過 NAT.

    [root@benjr ~]# route add -net 172.16.0.0 netmask 255.255.255.0 gw 172.16.0.3
    
    [root@benjr ~]# route
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    172.16.0.0      172.16.0.3    255.255.255.0   UG    0      0        0 eth1
    172.16.0.0      *             255.255.255.0   U     1      0        0 eth1
    10.1.1.0        *             255.255.252.0   U     0      0        0 eth0
    default         10.1.1.1      0.0.0.0         UG    0      0        0 eth0
    

    位於 172.16.0.0 Clients 的 IP / netmask / gateway 設定必須為 IP/netmask – 172.16.0.x / 255.255.255.0 ,gateway – 172.16.0.3 ,我們可以用 DHCP 都先設定好.

沒有解決問題,試試搜尋本站其他內容

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料