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

 

posted @ 2016-04-17 23:13  Biiigfish  阅读(8588)  评论(0编辑  收藏  举报