針對需求:
嵌入式開發中,經常使用板子和筆記本通過網線直連,如果需要板子連接到外網,就比較尷尬。
最簡單方法,可以把板子接到局域網內,我們的筆記本通過局域網交換機連接到板子,可是,這樣要很多修改 IP 的操作;通常情況下,這時,你還需要一台小交換機和幾根網線在你桌子上。很麻煩對不對?
這里提供了一個替代方法:可以配置筆記本 IPV4 轉發,筆記本用 Wi-Fi 來連接到網絡,然后,板子與筆記本有線連接的情況下,板子可以通過筆記本連接到外網。
大致如下圖:
開發板修改:
1. 修改開發板 /etc/network/interface 文件,主要將 gateway 改為筆記本 IP。
2. 重新插拔網線讓配置生效。(可以ifdown后ifup,插拔網線更快些 :)
筆記本(ubuntu,均需本機 root 權限):
1. 使能本機的 ip_forward : echo 1 > /proc/sys/net/ipv4/ip_forward
2. 設置 iptables 規則:
- 清除所有規則: iptables -F
- 因為清除了所有,所以需要先允許 INPUT: iptables -P INPUT ACCEPT
- 還需要允許 FORDWARD: iptables -P FORWARD ACCEPT
- 允許 NAT 轉發所有包到 wlan0:iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
可以使用下面兩條指令來查看配置是否有效:
1. 如果 ip_forward 是打開的,則輸出 1: cat /proc/sys/net/ipv4/ip_forward
2. iptables -nvL 看有哪些規則
如果是只有一個網口的台式機,沒辦法,那你還是乖乖的找交換機和網線去吧~!
搞了個腳本,免得每次手動敲:
#!/usr/bin/env bash if [ -z $1 ]; then echo "usage: forward_to [eth0|wlan0]" exit 1 fi if [ $(id -u) -ne 0 ]; then echo "Re-running script under sudo..." sudo "$0" "$@" exit 1 fi echo 1 > /proc/sys/net/ipv4/ip_forward iptables -F iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -t nat -A POSTROUTING -o $1 -j MASQUERADE #dhcpd eth0 -pf /var/run/dhcp-server/dhcpd.pid