ubuntu 设置 NAT 转发
针对需求:
嵌入式开发中,经常使用板子和笔记本通过网线直连,如果需要板子连接到外网,就比较尴尬。
最简单方法,可以把板子接到局域网内,我们的笔记本通过局域网交换机连接到板子,可是,这样要很多修改 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
——————无论在哪里做什么,只要坚持服务、创新、创造价值,其他的东西自然都会来的。