MTK 使用iptable 命令來完成網絡路由(android WIFI/4G分享網絡)


       很多時候,總有些奇怪的需求,這時候是發揮我們的聰明才智的時候!!

有客戶的需求是:

 

描述下需求:現今有一個控制設備,里面有WIFI,物聯網絡,以太網2個,其中有一個以太網2是鏈接內部設備,而其余幾個均可連接公網。要求是使得內部設備也能正常的訪問公網。

 

  這種需要的確有點讓人摸不着頭腦,其實這就是一種路由的問題,在這里以太網2與其他網絡設備是在同一個設備中(linux,android,Ubuntu等),也就是說他們內部是有聯系的。

那其實就是需要將以太網2的網絡請求定向至其他能夠連接公網的設備接口上。

 

解決:

  在linux和android設備上都有一些關於網絡的命令:iptable,ip rule,dhcp等。

這里的話我們得熟悉dhcpsd(dhcp服務端)與dhcpcd(dhcp客戶端),這里是這樣的,我們的ip是被自動分配的,而分配IP的自然是dhcpsd我們的服務端,我們家里用的路由器就是dhcpsd,而我們手機上則會運行dhcpcd來獲取ip。這里的話,我們需要使用一個dhcpsd,來為以太網卡2下的設備分配IP地址。

  添加路由規則,這里我也使用過ip rule去添加,但是效果不太好,也有可能是我學藝不精。這里使用的是iptable去完成的一個轉發規則。

 

首先,我們呢,使用iptable來實驗一下,如何試驗,試驗工具呢?

試驗工具:PC,android手機一台,Wireshark(抓包工具),Packet Sender(發包工具)

試驗目的:在PC端向連接同一網段WIFI的手機的5060端口發送數據包,然后手機通過路由表直接轉發給PC機的5060端口,使得PC監聽5060端口好像能收到自己從另個端口發來數據。

1.首先得使用Wireshark設備過濾項。

2.然后使用Packet Sender組織數據准備發到手機phone ip:5060。

3.編寫腳本:

iptables -t nat -A PREROUTING -d 192.168.0.194 -p tcp --dport 5060 -j DNAT --to-destination 192.168.0.121:5060

iptables -t nat -A POSTROUTING -s 192.168.0.121/24 -j SNAT --to 192.168.0.194

4.執行腳本,並執行發送命令,這樣通過抓包工具就能收到PC未知端口發向PC5060的數據。

我們來分析下腳本:

iptables :四張表+五條鏈+規則組成
表:    1.nat        地址轉發規則
        2.mangle        訪問控制,規則匹配
        3.raw        數據博狀態跟蹤與分析
        4.filter        修改數據包,改變包頭中的內容
鏈:    1.INPUT            到達本機內部的報文的位置
        2.OUTPUT        由本機內部發出的報文的位置  路由本機要發給目標的IP
        3.FORWARD        由本機轉發的報文的位置
        4.PREROUTING    報文進入本機的路由前的位置
        5.POSTROUTING    報文路由后流出本機的位置
規則自己添加
iptables [-t 表名] <-A|-I|-D|-R> 鏈名 [規則編號] [-i|-o 網卡名稱] [-p 協議類型] [-s 源IP地址|源子網] [-sport 源端口號] [-d 目標IP地址|目標子網] [-dport 目標端口號] [-m 模式 [模式選項]] -j 動作 [動作選項]

這里192.168.0.121為PC機,192.168.0.194為路由機(手機)。

那么第一條命令這樣解析:iptable -t(表) 在nat表中改報文進入本機的路由前的位置 目標為192.168.0.194,協議為tcp,且端口為5060的數據包 -j(動作)DNAT(目標地址)替換為192.168.0.121:5060。這樣就發回去了!

但是這樣抓到的包是PC發到PC,我們想把來源信息也修改下,所以就有了第二句:

nat 表,報文路由后流出本機的位置 -s來源為192.168.0.121/24 的源地址替換為192.168.0.194。

  好的,想必我們已經大致熟悉了iptable的使用方法,當然如果還有不了解什么源地址,目標地址的,請搜索關鍵詞:網絡基礎,報文,路由。這些基礎知識是必需的,先把這些基礎了解的才能更好地學習強大的iptable命令。

我們再嘗試寫一些小的試驗:

#將所有發送給192.168.0.121的數據包丟棄。

iptables -A OUTPUT -d 192.168.0.121 -j DROP

 

#拒絕所有來自192.168.0.0網段的數據

iptables -A INPUT -s 192.168.0.0/24 -j REJECT

iptables -t raw -A PREROUTING -d 192.168.0.0 -j REJECT

 

  上面已經做了拒絕網關的處理,那我們是不是無法上網了?對的網關的數據都會被拒絕或丟棄,那可咋辦?

  別急,既然可以添加表,當然也可以刪除表,使用:

  iptables -t raw -F 或者 iptables -F #清除所有規則

 

接下來就是我們的重頭戲了!!!

  怎么使用WIFI,4G分享網絡給我們的以太網口?我記着在我上學那會兒,學校斷網,大家為了打LOL都是開動了腦筋,使用數據流量,怎么分享呢,大都數使用的是WIFI熱點分享出自己的數據流量,但是這樣的信號會差很多,延遲高一些,有些機智的朋友使用USB來共享(現在android基本都有),使用USB作為一個虛擬的網卡,數據流量走向USB口。我想其中的原理大概是一樣的吧。

我們這里直接附上代碼:

 wlan_0=$(ifconfig -a wlan0|grep "inet addr");
 #echo $wlan_0;
 wlan_0=${wlan_0:20:13};
 #echo $wlan_0;

echo 1 > /proc/sys/net/ipv4/ip_forward;

#啟用IP轉發

ifconfig eth1 192.168.100.1 netmask 255.255.255.0;

ip route add 192.168.100.0/24 dev eth1 table local_network proto static scope link;

#這句不明白什么意思,知道是網友可以留言告訴我

ifconfig eth1:1 192.168.100.4 netmask 255.255.255.0 up;

#給eth1綁定第二個網卡

iptables -t nat -A POSTROUTING -o wlan0 -s 192.168.100.0/24 -j MASQUERADE

#地址偽裝,將wifi的ip替換為源ip地址

iptables -t nat -A PREROUTING -i eth1 -d 192.168.100.4 -j DNAT --to $wlan_0

#從eth1,IP為192.168.100.4流入的數據包做DNAT轉換轉發到內部wlan_0上   

iptables -t nat -A POSTROUTING -o eth1 -s $wlan_0 -j SNAT --to 192.168.100.4

#從eth_1流出,源地址為wlan_0的數據做SNAT轉換到外部192.168.100.4

busybox udhcpd -fS /system/data/eth1_udhcpd.conf&

#啟動dhcpd服務端為底下的設備自動分配IP地址
這樣,就能使用WIFI的網絡分享給我們下面的以太網口了,其余的網絡如法炮制。

eth1_udhcpd.conf文件如下:

start 192.168.100.2
end 192.168.100.200

 
         

interface eth0

 
         

opt dns 192.168.100.1
option subnet 255.255.255.0
opt router 192.168.100.1

 
         

max_leases 234

 
         

option domain local
option lease 120

 

這里再附上一些值得學習的鏈接:

https://blog.csdn.net/yujing2013/article/details/53482751 四網卡和一個網橋

https://blog.csdn.net/u012758088/article/details/76255543

https://blog.csdn.net/renwotao2009/article/details/51225359?utm_source=blogxgwz1

https://blog.csdn.net/sxy2475/article/details/78295447

https://blog.csdn.net/renwotao2009/article/details/51225359/

https://blog.csdn.net/kwame211/article/details/78800940 bctrl用法

https://www.ibm.com/support/knowledgecenter/zh/ssw_aix_72/com.ibm.aix.cmds2/dhcpcd.htm

https://www.ibm.com/support/knowledgecenter/zh/ssw_aix_72/com.ibm.aix.cmds2/dhcpsd.htm

https://www.isc.org/downloads/ dhcp源碼

https://www.cnblogs.com/ssooking/p/7890192.html iptables語法1
https://blog.csdn.net/sxy2475/article/details/78295447 iptables語法2

https://blog.csdn.net/luotong86/article/details/38688119 udhcpd配置文件英文說明

http://blog.51cto.com/moonsilver/215123 udhcpd配置中文說明

https://blog.csdn.net/chengxuyuanyonghu/article/details/64441374

 

 

 

 

 


免責聲明!

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



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