主题 : 用nat网络地址转换,实现了开发板也能通过电脑上网 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 39247
精华: 2
发帖: 51
金钱: 355 两
威望: 71 点
综合积分: 142 分
注册时间: 2011-03-07
最后登录: 2015-05-31
楼主  发表于: 2011-03-27 22:51

 用nat网络地址转换,实现了开发板也能通过电脑上网

今天突然突发奇想,没有路由器,能不能用交换机就能让开发板通过电脑上网,我想起的nat网络地址转换。

我们给rhel的实验环境添加两张网卡,一张用nat网络地址转换,一张用brigded,把iptables打开了,准备实验。

步骤:
1、设置用nat转的网卡eth0使用dhcp获得ip地址,并设置eth1的ip,我的为:192.168.1.111,掩码255.255.255.0,网关不设
1、编写脚本文件nat.sh,内容如下:
iptables -t nat -P POSTROUTING ACCEPT
echo '1' > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
2,、保存为并chmod 777一下,建立符号链接:
ln -s nat.sh /sbin/nat
可行性起见,也chmod一下nat符号链接
3、编辑/etc/rc.d/rc.lacal,添加下面:
nat(就这么短)
4、重启系统(可以不重启,只是想验证一下能否自启动脚本),并启动开发板,设置在192.168.1.0网络内的任意一个静态ip,譬如:192.168.1.70,网关设成eth1的ip地址:192.168.1.111,dns设成
eth0获取到的dns(一般都很稳定的)。
5,、应用设置,andriod系统就可以上网了,快来感受它的诱惑魅力吧!

本来我打算建个dhcp服务器来动态分配ip地址的,但因为用的是校园网,我建的服务器别人总是来请求,导致学校网络混乱。所以就用了这种方式!
这种方式,同样适用于没有路由器的pc之间,一台做服务器连外网,一台客户机,连内网,通过服务器可以达到全网可访问外网。


因为学校用的是锐捷认证,所以我打算在毕业时用开发板设计成一个支持锐捷认证的路由器,把认证软件移植到板子上,通过控制终端设置认证参数,给板子配置起码两个以上的
网卡,perfect,就可以给某些不愿意出多钱的学生带来福音了!哈哈,希望对此有兴趣的童鞋也来参与讨论。
级别: 圣骑士
UID: 9690
精华: 0
发帖: 369
金钱: 1955 两
威望: 415 点
综合积分: 738 分
注册时间: 2009-10-10
最后登录: 2017-11-21
1楼  发表于: 2011-03-28 11:13
没看明白,是不是一个多口交换机加一个路由器么,只不过路由器变成了一台pc 机,然后多口交换机里面的终端可以通过访问这台可以连外网的pc上网?
级别: 侠客
UID: 39247
精华: 2
发帖: 51
金钱: 355 两
威望: 71 点
综合积分: 142 分
注册时间: 2011-03-07
最后登录: 2015-05-31
2楼  发表于: 2011-03-28 14:03
我用一个交换机,pc机的网线和开发板的网线都接在这个交换机上,只要它们设置成同一网段,就能通信了,这个道理很简单吧!
连接学校的网线也也接到交换机上,也就是说交换机其实接了三条线。
由于学校用的dhcp获取ip,所以不得不用虚拟机虚拟另外两张网卡,一张用nat连接方式(只要虚拟机用的是nat协议的网卡,设成dhcp获取ip的方式,都能通过宿主机上网),另一张用brigded连接,保留用于和开发板通信。然后呢,就按照上面的步骤开启iptables服务。就可以用开发板上网了!
级别: 圣骑士
UID: 44407
精华: 0
发帖: 386
金钱: 1945 两
威望: 389 点
综合积分: 772 分
注册时间: 2011-04-25
最后登录: 2014-08-25
3楼  发表于: 2011-10-31 16:56
這個是linux的系統上實現,我剛好需要buildin在android....



编译好新内核后
# iptables -t nat -nL 提示

iptables v1.3.7: can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.

解决方法: 编译内核时加入以下模块

Linux Kernel Configuration
    -> Networking support
        -> Networking options
            -> Network packet filtering framework(netfilter)
                -> Core netfilter configuration
                    -> Netfilter connection tracking support
                    -> Netbios name service protocal support(new)
                    -> Netfilter Xtables support (required for ip_tables)

Linux Kernel Configuration
    -> Networking support
        -> Networking options
            -> Network packet filtering framework(netfilter)
                -> IP: Netfilter Configuration
                    -> IPv4 connection tracking support (require for NAT)
                    -> IP tables support (required for filtering/masq/NAT)
                -> Full NAT
                    -> MASQUERADE target support
                    -> REDIRECT target support

export ARCH=arm
export CROSS_COMPILE=arm-linux-
make CC=arm-linux-gcc modules
make CC=arm-linux-gcc zImage

然後我是使用make CC=arm-linux-gcc modules 產出*.ko在
linux-XXX/net/netfilter/*.ko
linux-XXX/net/Ipv4/netfilter/*.ko


insmod /system/libmodules/nf_conntrack.ko
insmod /system/libmodules/nf_conntrack_ipv4.ko
insmod /system/libmodules/nf_nat.ko
insmod /system/libmodules/x_tables.ko
insmod /system/libmodules/ip_tables.ko
insmod /system/libmodules/xt_multiport.ko
insmod /system/libmodules/iptable_filter.ko
insmod /system/libmodules/iptable_nat.ko
insmod /system/libmodules/ipt_MASQUERADE.ko
insmod /system/libmodules/xt_state.ko

後來試的結果,建議還是* 取代M, 因為我不知道insmod module的相依先後次序。
[ 此帖被kazaya在2011-11-02 16:02重新编辑 ]
级别: 新手上路
UID: 69216
精华: 0
发帖: 9
金钱: 20 两
威望: 10 点
综合积分: 18 分
注册时间: 2012-05-03
最后登录: 2017-09-13
4楼  发表于: 2012-05-08 13:53
菜鸟看不懂啊,大神