<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                NatCmd和NAT相關,本節首先介紹NAT的背景知識。 **1.背景知識介紹[25]** 在傳統TCP/IP通信過程中,所有的路由器僅僅是充當一個中間人的角色,也就是通常所說的存儲轉發。即路由器不會對轉發的數據包進行修改。準確地講,除了將源MAC地址換成自己的MAC地址以外,路由器不會對轉發的數據包做任何修改。而NAT恰恰是出于某種特殊需要而對數據包的源IP地址、目的IP地址、源端口、目的端口進行改寫的操作。 什么情況下需要NAT(Network Address Translation,網絡地址轉換)呢?假設想在公司內網搭建一個WWW服務器以對外發布信息。由于公司內網使用的都是內部IP,故無法向外網發布該服務。這時就可通過NAT來解決這個問題。比如網管可在防火墻的外部網卡上綁定多個合法IP地址,然后通過NAT技術使發給其中某一個IP地址的包轉發至這個內部的WWW服務器上,然后再將該內部WWW服務器的響應包偽裝成該合法IP發出的包。 NAT分為兩種,分別是源NAT(SNAT)和目的NAT(DNAT),顧名思義,SNAT就是改變轉發數據包的源地址,DNAT就是改變轉發數據包的目的地址。Linux系統上的NAT操作是通過iptables的nat表來完成,該表有三條默認Chain,它們分別如下。 - PREROUTING:可在此定義目的NAT的規則,因為路由器進行路由時只檢查數據包的目的IP地址,所以為了使數據包得以正確路由,必須在路由之前就進行目的NAT。 * POSTROUTING:可以在這里定義進行源NAT的規則,系統在決定了數據包的路由以后再執行該鏈中的規則。 * OUTPUT:定義對本地產生的數據包的目的NAT規則。 此處給出使用iptables進行NAT轉換的兩個例子。 ~~~ //更改所有來自192.168.1.0/24的數據包的源IP地址為1.2.3.4: iptables-t nat-A POSTROUTING-s 192.168.1.0/24-o eth0-j SNAT--to 1.2.3.4 //更改所有來自192.168.1.0/24的數據包的目的IP地址為1.2.3.4: iptables-t nat-A PREROUTING-s 192.168.1.0/24-i eth1-j DNAT--to 1.2.3.4 ~~~ **2.NatCmd命令使用** NatCmd僅支持"enable"和"disable"兩個命令選項。不過和上一節介紹的不同,Android中的NAT并不是只利用iptables的nat表來做轉換,而是借助ip route命令和iptables的filter表在源和目標網絡設備及指定IP地址之間進行地址轉換。以"enable"選項為例,其使用方式如下。 ~~~ ndc nat enable lo wlan0 1 202.106.25.35/14 ~~~ 其中: * lo為本地回環設備、代表輸入設備。 * wlan0為無線NIC,代表輸出設備。 * 1代表后面的地址組合只有一個。 * 202.106.25.35/14指明IP地址和子網掩碼。 以上面的命令為例,NatCmd執行它所涉及的iptables命令的調用序列如下所示。 ~~~ iptables-A natctrl_FORWARD-i eth0-o lo-m state--state ESTABLISHED,RELATED-j RETURN iptables-A natctrl_FORWARD-i lo-o eth0-m state--state INVALID-j DROP iptables-A natctrl_FORWARD-i lo-o eth0-j RETURN iptables-D natctrl_FORWARD-j DROP iptables-A natctrl_FORWARD-j DROP iptables-t nat-A natctrl_nat_POSTROUTING-o eth0-j MASQUERADE #MASQUERADE能自動讀取eth0現在的IP地址然后做SNAT #這樣就避免了每次eth0地址發生改變時都需更新iptables的煩惱 ~~~ * * * * * **注意** 上邊的命令中并沒有利用傳遞的IP地址,這是因為這些地址和ip命令的多路由策略管理有關,只有使用了多路由策略管理,這些IP地址才能被ip命令用上。由于代碼中沒有任何說明,所以筆者也很難理解這部分內容。如果有知曉的讀者,還請和大家一起分享相關知識。 根據上面的iptables調用命令,讀者也能猜測出enableNat的目的是修改來自源設備的數據包,使它看起來是目標設備發出的數據包 * * * * * 圖2-23所示為利用ndc在Galaxy Note 2測試nat命令的結果。 :-: ![](https://box.kancloud.cn/cb1ad02e3f2b1f0f5319ba18e53fb7b2_1130x233.jpg) 圖2-23 iptables查看natctrl_FORWARD規則 圖2-23所示為利用ndc nat enable rmnet0 wlan0 0添加nat規則后,再通過iptables-S查看natctrl_FORWARD鏈的具體規則時得到的結果。 * * * * * **注意** 其中TCPMSS這條規則應該是三星公司自己添加的,不過令人匪夷所思的是該命令竟然打出了"FIX ME!"這樣的輸出。看來,網絡管理的確是一個很有技術含量的活。 * * * * *
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看