wandersky 发表于 2020-4-9 15:33

在IMX6ULL上实现NAT过程

本帖最后由 wandersky 于 2020-4-9 15:35 编辑

目的: imx6ull通过USB驱动4G模块,用来上公网, 同时imx6ull也有本地网卡eth0 eth1,, 要求笔记本连接到imx6ull它的本地网口可以共享imx6ull的4G模块来上网。

过程是坎坷的,

结果是满意的。

遇到了几个问题,

1,nfs挂载失败,这个也成了一个小绊脚石,有点意外的。我实现了N个NFS服务器了。在我的虚拟机上建立了一个NFS服务器,在虚拟机上顺利的自己挂载上了自己。但是从嵌入式MX6ULL挂载虚拟机的NFS目录时,却不成功。一直提示

:mount.nfs: an incorrect mount option was specified

解决过程序,

*& 在imx6ull里也添加了nfs-server 服务,网上是这么说的,

*& mount -o nolock,nfsvers=3-t nfs 192.168.111.104:/home/willow/linux/imx6ull/nfs/mnt 使用这个命令挂载。

我不知道到底是哪个措施起作用了,因为我之前一直使用下面这个命令。

mount -o nolock-t nfs 192.168.111.104:/home/willow/linux/imx6ull/nfs/mnt

2ME909 4G模块在IMX6ULL上的移植,这个简单,我用的阿尔法的开发板,发现自带的内核就可以驱动ME909,直接就能看到CDC_ETHER驱动起来了,输入ifocnfig,也可以看到了usb0网卡,那我就不客气了,直接拨号:

echo "AT^NDISDUP=1,1">/dev/ttyUSB0

然后再查看ifconfig, 顺利的就看到了usb0获得到的IP地址。然后也可以ping 通百度了



3其实这个工作最大的困难是NAT在内核中的配置。

#!/bin/bash                                                         
# 0. 设定你的参数值                                                
EXIF='usb0'         # 这个是对外的网卡接口, 可能是'ppp0'等         
EXNET='192.168.0.1/24'       # 这个是对内的网段                     
# 底下如无需要, 请不要改动了!                                    
# 1. 启动routing等                                             
echo 1 > /proc/sys/net/ipv4/ip_forward                              
/usr/sbin/iptables -F                                                   
/usr/sbin/iptables -X                                                   
/usr/sbin/iptables -Z                                                   
/usr/sbin/iptables -F -t nat                                             
/usr/sbin/iptables -X -t nat                                             
/usr/sbin/iptables -Z -t nat                                             
/usr/sbin/iptables -P INPUT   ACCEPT                                    
/usr/sbin/iptables -P OUTPUTACCEPT                                    
/usr/sbin/iptables -P FORWARD ACCEPT                                    
/usr/sbin/iptables -t nat -P PREROUTING   ACCEPT                        
/usr/sbin/iptables -t nat -P POSTROUTINGACCEPT                        
/usr/sbin/iptables -t nat -P OUTPUT       ACCEPT                        
# 2. 载入模组                                                
/sbin/modprobe ip_tables 2> /dev/null                                 
/sbin/modprobe ip_nat_ftp 2> /dev/null                              
/sbin/modprobe ip_nat_irc 2> /dev/null                              
/sbin/modprobe ip_conntrack 2> /dev/null                              
/sbin/modprobe ip_conntrack_ftp 2> /dev/null                        
/sbin/modprobe ip_conntrack_irc 2> /dev/null                        
# 3. 启动ip伪装                                                   
/usr/sbin/iptables -t nat -A POSTROUTING -o $EXIF -s $EXNET -j MASQUERADE

执行上面的脚本,一直提示 iptables 没有安装,于是配置内核安装IPTABLES, 安装完iptables之后,执行/usr/sbin/iptables -F -t nat命令,一直提示没有NAT表,

为了添加NAT表,费了我很大的时间,j明知道NAT相关的配置CONFIG_IP_NF_NAT 就在这下面,但是就是打不开,因为内核的配置很多的是相关联的,与之相关联的没有使能,CONFIG_IP_NF_NAT 这项配置根本就看不到,
Networking support -->

         Networking option--->

                  Network packet filteringframework(netfilter)-->

                                 core netfilter configuration-->

                                 IP: netfilter configuration-->





主要就配置这里,但是如果在core netfilter configuration里面没有把相关联的配置使能的话,IPV4 NAT是出不来的。费了我一下午时间表,还算弄好了,通过笔记本连接imx6ull的有线网口,笔记本网关设置为imx6ull的本地网口的IP地址,就可以在笔记本上ping通知公网IP地址了, 221.6.4.66了, 但是ping不通域名,这个没有解决,应该是NAT没有转发DNS数据包的问题吧。
页: [1]
查看完整版本: 在IMX6ULL上实现NAT过程