WIFI AP模式通過LAN網線上網


一、配置內核,支持iptables、forward和nat

 

 

 

 

 二、交叉編譯iptables

a.源碼下載:

ftp://ftp.netfilter.org/pub/iptables/

b.交叉編譯iptables

tar -xvf iptables-1.8.4.tar.bz2
cd iptables-1.8.4
mkdir build
./configure --prefix=$PWD/build --host=arm-linux

這時報如下錯誤:

checking for libmnl... no
*** Error: No suitable libmnl found. ***
    Please install the 'libmnl' package
    Or consider --disable-nftables to skip
    iptables-compat over nftables support.

加上--disable-nftables重新配置:

./configure --prefix=$PWD/build --host=arm-linux --disable-nftables

配置成功,執行make進行編譯,編譯完成后執行make install進行安裝,會安裝在build目錄下。

root@machine:~/wifi/iptables-1.8.4# ls build
bin  include  lib  sbin  share

把build/lib build/sbin build/bin目錄里的內容全部拷貝到開發板的/usr/lib /usr/sbin/ /usr/bin目錄下,這里需要注意的是拷貝的時候使用“cp -rf”,連同軟鏈接也一起拷貝。

三、測試

a. 啟用內核轉發

echo "net.ipv4.ip_forward = 1" > /etc/sysctl.conf  #如果開發板文件系統本身不存在/etc/sysctl.conf文件,使用'>',否則使用'>>'(添加到文件尾)。
sysctl -p

或者

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

 

b.開發板上執行配置 iptables

iptables -F
iptables -t nat -F
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

這時報如下錯誤:

/root # iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables v1.8.4 (legacy): Couldn't load target `MASQUERADE':No such file or directory

Try `iptables -h' or 'iptables --help' for more information.

解決辦法:

export XTABLES_LIBDIR=/usr/lib/xtables:$XTABLES_LIBDIR

然后就可以成功執行“iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE”了,這時連接到熱點的設備即可通過eth0去訪問互聯網了。

eth0可以設置靜態IP地址也可以使用dhclient動態獲取IP地址,建議使用dhclient動態獲取,dhclient會自動配置好網關和DNS。

手動設置靜態IP的話需要自己去配置網關和DNS,方法如下:

ifconfig eth0 192.168.0.102 #路由器的LAN口IP為192.168.0.1這里需要和路由器LAN口在同一個網段
route add default gw 192.168.0.1 dev eth0 #設置eth0網關

修改/etc/resolv.conf添加DNS:

nameserver 192.168.0.1  #192.168.0.1是路由器的LAN口IP地址
nameserver 8.8.8.8 #google域名服務器 
nameserver 8.8.4.4 #google域名服務器

設置完成后可以查看一下網關是否設置正確:

route -n

或者

netstat -r

 四、寫一個腳本開機自動執行

#! /bin/sh
export XTABLES_LIBDIR=/usr/lib/xtables:$XTABLES_LIBDIR
hostapd -B /etc/myhostapd.conf
ifconfig wlan0 192.168.3.1
dhcpd -cf /etc/dhcpd.conf wlan0
echo "1" > /proc/sys/net/ipv4/ip_forward
#echo "net.ipv4.ip_forward = 1" > /etc/sysctl.conf
#sysctl -p
iptables -F
iptables -t nat -F
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

 


免責聲明!

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



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