编译内核,支持 iptables 和 forward 和 nat。

编译内核,使用新内核启动arm 开发板。

编译内核支持 iptables
-> Networking support (NET [=y])
  -> Networking options
    -> Network packet filtering framework (Netfilter) (NETFILTER [=y])
      -> IP: Netfilter Configuration
      
本开发板是通过 LAN 有线连接到 路由器上。路由器网段为 192.168.1.1
      
首先要配置 LAN 的网关,DNS 等 ,因为之前已经配置好 dhcp
如果你不是使用 NFS 文件系统可以这样做。
dhclient eth0

使用 NFS 文件系统,因为已经连接上,在执行 dhcp 就会断开重新获取 IP ,文件系统是在 NFS 上,所以就会死机。
#手动设定IP
ifconfig eth0 192.168.1.10 netmask 255.255.255.0
#网关
route add default gw 192.168.1.1
#DNS
echo nameserver 192.168.1.1 >/etc/resolv.conf

ping qq.com 测试

LAN 网络正常,配置好了。

手工给 WLAN0 分配一个 IP
ifconfig wlan0 192.168.100.1 netmask 255.255.255.0

启动 DHCP 服务
dhcpd -cf /etc/dhcpd.conf wlan0
要注意 DHCP 配置文件中有 wlan0 的网段
cat /etc/dhcpd.conf
subnet 192.168.100.0 netmask 255.255.255.0 {
  range 192.168.100.10 192.168.100.100;
  option domain-name-servers 192.168.1.1,8.8.8.8,8.8.4.4;
  option routers 192.168.100.1;
}

启用 wlan0 AP
hostapd -B /etc/myhostapd.conf

关键的 iptables

编译  iptables
下载地址 下载最新的 1.6.1
wget ftp://ftp.netfilter.org/pub/iptables/iptables-1.6.1.tar.bz2
tar xvf iptables-1.6.1.tar.bz2
cd iptables-1.6.1
./configure --prefix=$PWD/tmp --host=arm-linux

有错误
checking for libmnl... no
*** Error: No suitable libmnl found. ***
    Please install the 'libmnl' package
    Or consider --disable-nftables to skip
    iptables-compat over nftables support.

这里有说明,可以去掉 感觉这个和 NAT 也没关系,就不装了
./configure --prefix=$PWD/tmp --host=arm-linux --disable-nftables
make
libebt_log.c: In function 'brlog_parse':
libebt_log.c:147: error: 'EBT_LOG_IP6' undeclared (first use in this function)
libebt_log.c:147: error: (Each undeclared identifier is reported only once
libebt_log.c:147: error: for each function it appears in.)
libebt_log.c: In function 'brlog_print':
libebt_log.c:174: error: 'EBT_LOG_IP6' undeclared (first use in this function)
make[2]: *** [libebt_log.oo] 错误 1
make[2]:正在离开目录 `/home/iptables-1.6.1/extensions'
make[1]: *** [all-recursive] 错误 1
make[1]:正在离开目录 `/home/iptables-1.6.1'
make: *** [all] 错误 2

打开发现没有宏定义,从 LINUX 源码中找到了一个
#define EBT_LOG_IP6 0x08
添加到 libebt_log.c 文件中

make install
cd tmp

复制库 和 可执行文件到 ARM 板
cp lib/* -rfd /home/nfs/fs2440/lib
cp bin/* -rfd /home/nfs/fs2440/usr/bin
cp sbin/* -rfd /home/nfs/fs2440/usr/bin

复制 ubunto 的 配置文件到 ARM 文件系统中
cp /etc/sysctl.conf /home/nfs/fs2440/etc

编辑 vi /home/nfs/fs/etc/sysctl.conf
net.ipv4.ip_forward=1 去掉前面的 # 启用 内核转发
经过测试,发现 无效
cat /proc/sys/net/ipv4/ip_forward
手动开启
echo "1" > /proc/sys/net/ipv4/ip_forward

ARM 上执行配置 iptables
iptables -F
iptables -t nat -F
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

/ # iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
iptables v1.4.12.1: Couldn't load target `MASQUERADE':No such file or directory
报错,我在这里还测试了 1.4.12 的版本

查看源码 iptables-1.4.12.1/iptables/xtables.c +727
#ifndef NO_SHARED_LIBS
    if (!ptr && tryload != XTF_DONT_LOAD && tryload != XTF_DURING_LOAD) {
        ptr = load_extension(xtables_libdir, afinfo->libprefix,
              name, true);

if (ptr == NULL && tryload == XTF_LOAD_MUST_SUCCEED)
            xt_params->exit_err(PARAMETER_PROBLEM,
                   "Couldn't load target `%s':%s\n",
                   name, strerror(errno));
    }
看样子,不使用动态库就不会执行这里
void xtables_init(void)
{
    xtables_libdir = getenv("XTABLES_LIBDIR");
    if (xtables_libdir != NULL)
        return;

解决方法,定义一个 XTABLES_LIBDIR 变量 或是编译为静态的。

执行 iptables 前先设定库        
export XTABLES_LIBDIR=/lib/xtables

重新启动ARM
把上面的初始化命令重新整理一下,开机后执行下面所有命令
ifconfig eth0 192.168.1.10 netmask 255.255.255.0
route add default gw 192.168.1.1
echo nameserver 192.168.1.1 >/etc/resolv.conf
ifconfig wlan0 192.168.100.1 netmask 255.255.255.0
dhcpd -cf /etc/dhcpd.conf wlan0
hostapd -B /etc/myhostapd.conf
echo "1" > /proc/sys/net/ipv4/ip_forward
export XTABLES_LIBDIR=/lib/xtables
iptables -F
iptables -t nat -F
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

最后,放上测试图。

ARM WIFI AP 模式 使用 iptables nat 转发 通过 LAN 网线上网的更多相关文章

  1. Marvell w8782 sdio wifi AP模式设置

    http://blog.csdn.net/junllee/article/details/8895908 w8782工作在station模式一切正常,于是想试试AP模式(master mode): A ...

  2. Arduino IDE for ESP8266教程(二) 创建WIFI AP模式

    创建WIFI热点 #include <ESP8266WiFi.h> void setup() { Serial.begin ( 115200 ); Serial.println(" ...

  3. iptables 端口转发--内网实现上网

    iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 118.x.x.xiptables -A FORWARD -s ...

  4. 华硕RT-AC86U路由器 AP模式实现多路由器组网,扩展主路由器的无线网范围

    描述: 宽带拨号上网的路由器为 TP-LINK  TL-WAR1200L,由于室内空间大,遂在此路由器下接入一个 华硕RT-AC86U路由器: 配置使该 华硕路由器与 TP-LINK 路由器的网段相同 ...

  5. Android KitKat 4.4 Wifi移植AP模式和网络共享的调试日志

    Tethering技术在移动平台上已经运用的越来越广泛了.它能够把移动设备当做一个接入点,其它的设备能够通过Wi-Fi.USB或是Bluetooth等方式连接到此移动设备.在Android中能够将Wi ...

  6. 烂泥:KVM使用NAT联网并为VM配置iptables端口转发

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 在前面的文章中,我们介绍KVM的虚拟机(以下简称VM)都是通过桥接方式进行联网的. 本篇文章我们来介绍KVM的VM通过NAT方式进行联网,并且通过配置I ...

  7. 转:KVM使用NAT联网并为VM配置iptables端口转发,kvmiptables

    转载地址:https://www.ilanni.com/?p=7016 在前面的文章中,我们介绍KVM的虚拟机(以下简称VM)都是通过桥接方式进行联网的. 本篇文章我们来介绍KVM的VM通过NAT方式 ...

  8. iptables实战系列:通过NAT转发实现私网对外发布信息

    原文地址: http://os.51cto.com/art/201109/289486.htm [51CTO独家特稿]本文将介绍一个使用iptables实现NAT转发功能的案例. 本文假设读者已经对N ...

  9. iptables nat 技术转发

    NAT 一. 什么是 NAT NAT(Network Address Translation)译为网络地址转换.通常路由器在转发我们的数据包时,仅仅会将源MAC地址换成自己的MAC地址,但是NAT技术 ...

随机推荐

  1. Spring Boot Admin最佳实践

    本文不进行Spring Boot Admin入门知识点说明 在Spring Boot Actuator中提供很多像health.metrics等实时监控接口,可以方便我们随时跟踪服务的性能指标.Spr ...

  2. NI Vision 介绍

    NI Vision主要包括三种主要软件包: 主程序包(Vision Acquisition Software), 视觉开发模块(Vision Development Module), 以及用于自动检测 ...

  3. Shell 快速入门(十八):特殊符号的使用

    在 Shell 语言中,经常会看到中括号和括号组成的特殊标识,例如:[].[[]].(()).$(()).().这些符号经常使我们非常迷惑,弄清楚它们之间的作用和区别非常必要. 在开始之前,我们先来学 ...

  4. android greendao的外部封装不太友好。

    https://github.com/greenrobot/greenDAO 下载下官网的示例,有完整的封装版本,但自已封装是碰到很多问题. 因greenDao的Master和Session中很多方法 ...

  5. 使用Spring AOP 实现日志管理(简单教程)

    有时候,我们在做项目时会遇到这样的需求: 给XXX.java中的所有方法加上指定格式的日志输出. 针对这种指定类.或者指定方法进行共性操作的功能,我们完全可以使用Spring AOP来实现. 本文使用 ...

  6. makefile中的变量赋值

    在makefile中赋值方式有:'='.':='.'?='和'+='. A = a $(B) B = b all: echo $(A) #运行结果:echo a b a b 这种赋值方式是没有先后顺序 ...

  7. 【Linux_Shell 脚本编程学习笔记一、条件表达式】

    条件表达式返回的结果都为布尔型 真为1,假为0 条件测试的表达式 [expression] 比较符 整数比较 -eq:比较两个整数是否相等,$A -eq $B -ne:测试两个整数是否不等,不等则为真 ...

  8. CIA Hive Beacon Infrastructure复现1——使用Apache mod_rewrite实现http流量分发

    0x00 前言 2017年11月9日维基解密公布一个代号为Vault8的文档,包含服务器远程控制工具Hive的源代码和开发文档.开发文档中的框架图显示Hive支持流量分发功能,若流量有效,转发至Hon ...

  9. 转: zabbix对cisco2960的监控

    转自:http://blog.chinaunix.net/uid-12115233-id-3561954.html 1:首先在官网下载Cisco2950 模板https://www.zabbix.co ...

  10. 腾讯自动化测试的AI智能

    引子: 本文是林奕在腾讯 DevDays 2018 分享内容的脱敏整理,介绍了 CSIG 测试开发中心(前 SNG 测试开发中心)在自动化测试领域所做的智能化尝试. 大致分成下面几部分: 使用AI面对 ...