很多时候,总有些奇怪的需求,这时候是发挥我们的聪明才智的时候!!

有客户的需求是:

公网

WIFI

4G/其他网络

以太网1

以太网2

内部设备

描述下需求:现今有一个控制设备,里面有WIFI,物联网络,以太网2个,其中有一个以太网2是链接内部设备,而其余几个均可连接公网。要求是使得内部设备也能正常的访问公网。

这种需要的确有点让人摸不着头脑,其实这就是一种路由的问题,在这里以太网2与其他网络设备是在同一个设备中(linux,android,Ubuntu等),也就是说他们内部是有联系的。

那其实就是需要将以太网2的网络请求定向至其他能够连接公网的设备接口上。

解决:

在linux和android设备上都有一些关于网络的命令:iptable,ip rule,dhcp等。

这里的话我们得熟悉dhcpsd(dhcp服务端)与dhcpcd(dhcp客户端),这里是这样的,我们的ip是被自动分配的,而分配IP的自然是dhcpsd我们的服务端,我们家里用的路由器就是dhcpsd,而我们手机上则会运行dhcpcd来获取ip。这里的话,我们需要使用一个dhcpsd,来为以太网卡2下的设备分配IP地址。

添加路由规则,这里我也使用过ip rule去添加,但是效果不太好,也有可能是我学艺不精。这里使用的是iptable去完成的一个转发规则。

首先,我们呢,使用iptable来实验一下,如何试验,试验工具呢?

试验工具:PC,android手机一台,Wireshark(抓包工具),Packet Sender(发包工具)

试验目的:在PC端向连接同一网段WIFI的手机的5060端口发送数据包,然后手机通过路由表直接转发给PC机的5060端口,使得PC监听5060端口好像能收到自己从另个端口发来数据。

1.首先得使用Wireshark设备过滤项。

2.然后使用Packet Sender组织数据准备发到手机phone ip:5060。

3.编写脚本:

iptables -t nat -A PREROUTING -d 192.168.0.194 -p tcp --dport  -j DNAT --to-destination 192.168.0.121:

iptables -t nat -A POSTROUTING -s 192.168.0.121/ -j SNAT --to 192.168.0.194

4.执行脚本,并执行发送命令,这样通过抓包工具就能收到PC未知端口发向PC5060的数据。

我们来分析下脚本:

iptables :四张表+五条链+规则组成
表: .nat 地址转发规则
.mangle 访问控制,规则匹配
.raw 数据博状态跟踪与分析
.filter 修改数据包,改变包头中的内容
链: .INPUT 到达本机内部的报文的位置
.OUTPUT 由本机内部发出的报文的位置 路由本机要发给目标的IP
.FORWARD 由本机转发的报文的位置
.PREROUTING 报文进入本机的路由前的位置
.POSTROUTING 报文路由后流出本机的位置
规则自己添加
iptables [-t 表名] <-A|-I|-D|-R> 链名 [规则编号] [-i|-o 网卡名称] [-p 协议类型] [-s 源IP地址|源子网] [-sport 源端口号] [-d 目标IP地址|目标子网] [-dport 目标端口号] [-m 模式 [模式选项]] -j 动作 [动作选项]

这里192.168.0.121为PC机,192.168.0.194为路由机(手机)。

那么第一条命令这样解析:iptable -t(表) 在nat表中改报文进入本机的路由前的位置 目标为192.168.0.194,协议为tcp,且端口为5060的数据包 -j(动作)DNAT(目标地址)替换为192.168.0.121:5060。这样就发回去了!

但是这样抓到的包是PC发到PC,我们想把来源信息也修改下,所以就有了第二句:

nat 表,报文路由后流出本机的位置 -s来源为192.168.0.121/24 的源地址替换为192.168.0.194。

好的,想必我们已经大致熟悉了iptable的使用方法,当然如果还有不了解什么源地址,目标地址的,请搜索关键词:网络基础,报文,路由。这些基础知识是必需的,先把这些基础了解的才能更好地学习强大的iptable命令。

我们再尝试写一些小的试验:

#将所有发送给192.168.0.121的数据包丢弃。

iptables -A OUTPUT -d 192.168.0.121 -j DROP

 

#拒绝所有来自192.168.0.0网段的数据

iptables -A INPUT -s 192.168.0.0/24 -j REJECT

iptables -t raw -A PREROUTING -d 192.168.0.0 -j REJECT

 

上面已经做了拒绝网关的处理,那我们是不是无法上网了?对的网关的数据都会被拒绝或丢弃,那可咋办?

别急,既然可以添加表,当然也可以删除表,使用:

iptables -t raw -F 或者 iptables -F #清除所有规则

接下来就是我们的重头戏了!!!

怎么使用WIFI,4G分享网络给我们的以太网口?我记着在我上学那会儿,学校断网,大家为了打LOL都是开动了脑筋,使用数据流量,怎么分享呢,大都数使用的是WIFI热点分享出自己的数据流量,但是这样的信号会差很多,延迟高一些,有些机智的朋友使用USB来共享(现在android基本都有),使用USB作为一个虚拟的网卡,数据流量走向USB口。我想其中的原理大概是一样的吧。

我们这里直接附上代码:

wlan_0=$(ifconfig -a wlan0|grep "inet addr");
 #echo $wlan_0;
 wlan_0=${wlan_0:20:13};
 #echo $wlan_0;

echo  > /proc/sys/net/ipv4/ip_forward;

#启用IP转发

ifconfig eth1 192.168.100.1 netmask 255.255.255.0;

ip route add 192.168.100.0/ dev eth1 table local_network proto static scope link;

#这句不明白什么意思,知道是网友可以留言告诉我

ifconfig eth1: 192.168.100.4 netmask 255.255.255.0 up;

#给eth1绑定第二个网卡

iptables -t nat -A POSTROUTING -o wlan0 -s 192.168.100.0/ -j MASQUERADE

#地址伪装,将wifi的ip替换为源ip地址

iptables -t nat -A PREROUTING -i eth1 -d 192.168.100.4 -j DNAT --to $wlan_0

#从eth1,IP为192.168.100.4流入的数据包做DNAT转换转发到内部wlan_0上   

iptables -t nat -A POSTROUTING -o eth1 -s $wlan_0 -j SNAT --to 192.168.100.4

#从eth_1流出,源地址为wlan_0的数据做SNAT转换到外部192.168.100.

busybox udhcpd -fS /system/data/eth1_udhcpd.conf&

#启动dhcpd服务端为底下的设备自动分配IP地址
这样,就能使用WIFI的网络分享给我们下面的以太网口了,其余的网络如法炮制。 eth1_udhcpd.conf文件如下:

start 192.168.100.2
end 192.168.100.200


interface eth0


opt dns 192.168.100.1
option subnet 255.255.255.0
opt router 192.168.100.1


max_leases 234


option domain local
option lease 120

 

这里再附上一些值得学习的链接:

https://blog.csdn.net/yujing2013/article/details/53482751 四网卡和一个网桥

https://blog.csdn.net/u012758088/article/details/76255543

https://blog.csdn.net/renwotao2009/article/details/51225359?utm_source=blogxgwz1

https://blog.csdn.net/sxy2475/article/details/78295447

https://blog.csdn.net/renwotao2009/article/details/51225359/

https://blog.csdn.net/kwame211/article/details/78800940 bctrl用法

https://www.ibm.com/support/knowledgecenter/zh/ssw_aix_72/com.ibm.aix.cmds2/dhcpcd.htm

https://www.ibm.com/support/knowledgecenter/zh/ssw_aix_72/com.ibm.aix.cmds2/dhcpsd.htm

https://www.isc.org/downloads/ dhcp源码

https://www.cnblogs.com/ssooking/p/7890192.html iptables语法1
https://blog.csdn.net/sxy2475/article/details/78295447 iptables语法2

https://blog.csdn.net/luotong86/article/details/38688119 udhcpd配置文件英文说明

http://blog.51cto.com/moonsilver/215123 udhcpd配置中文说明

https://blog.csdn.net/chengxuyuanyonghu/article/details/64441374

MTK 使用iptable 命令来完成网络路由(android WIFI/4G分享网络)的更多相关文章

  1. UWP开发:获取用户当前所在的网络环境(WiFi、移动网络、LAN…)

    原文:UWP开发:获取用户当前所在的网络环境(WiFi.移动网络.LAN-) UWP开发:获取用户当前所在的网络环境: 在uwp开发中,有时候,我们需要判断用户所在的网络,是WiFi,还是移动网络,给 ...

  2. Android之监测手机网络状态的广播

    Android之监测手机网络状态的广播 Android 监控网络状态 Android利用广播监听设备网络连接(断网)的变化情况

  3. linux 虚拟机模拟配置网络路由环境-简版

    前言:网络路由不管是平常在家里,还是在公司中,都是必需配置的,所以还是非常重要的,今天小编就给大家做个配置网络路由配置的小实验,仅供大家参考.   一.首先,来简单介绍一下网络路由. 1. 网络路由: ...

  4. 自研DCI网络路由交换协议DCIP-白牌交换机时代的企业网络

    一转眼从听华为3Com的路由交换课程到如今已经13年有余了,依稀记得第一节课的时候我带着老婆去听的课(老婆是日语系的.那时还是女朋友,并不懂网络,仅仅是跟着我去上课的).抢了个头排,讲师宋岩老师提问了 ...

  5. CCNA网络工程师学习进程(3)常规网络设计模型与基本的网络协议

        本节介绍分层的网络设计模型与基本的网络协议,包括ARP协议,ICMP协议和IP协议.     (1)三层网络架构: 一个好的园区网设计应该是一个分层的设计.一般分为接入层.汇聚层(分布层).核 ...

  6. Android利用Fiddler进行网络数据抓包,手机抓包工具汇总

    Fiddler抓包工具 Fiddler抓包工具很好用的,它可以干嘛用呢,举个简单例子,当你浏览网页时,网页中有段视频非常好,但网站又不提供下载,用迅雷下载你又找不到下载地址,这个时候,Fiddler抓 ...

  7. IPFS网络是如何运行的(p2p网络)

    IPFS是一个p2p网络,先来看看BitTorrent的p2p网络是如何工作的? 想要bt下载一个文件,首先你需要一个种子文件torrent,种子文件包含至少一个 Tracker(一台服务器地址)信息 ...

  8. 网络知识梳理--OSI七层网络与TCP/IP五层网络架构及二层/三层网络(转)

     reference:https://www.cnblogs.com/kevingrace/p/5909719.html https://www.cnblogs.com/awkflf11/p/9190 ...

  9. CentOS 配置无线网络,开启wifi

    背景:一台老笔记本安装CentOS7.x,最小安装模式,安装后无法开启wifi 1.先用NetworkManager包的nmcli命令检查网卡,发现无线网卡wlo1信息里有个错误plugin miss ...

随机推荐

  1. Unity进阶----AssetBundle_01(2018/10/30)

    AssetBundle作用和定义 1).AssetBundle是一个压缩包包含模型.贴图.预制体.声音.甚至整个场景,可以在游戏运行的时候被加载: 2).AssetBundle自身保存着互相的依赖关系 ...

  2. 网络编程之socketserver以及socket更多方法

    关于socketserver 关于socket的更多方法 服务端套接字函数: s.bind() 绑定(主机,端口号)到套接字 s.listen() 开始tcp监听 s.accept () 被动接受tc ...

  3. 扫毒>>观后感

    观后感 中学时期,甚至在小学时期,那个很懵懂的年龄, 看了什么电影,去了哪里,都要写观后感. 那个时候觉得观后感很玄学,为啥看的电影都一样,去的地方都一样, 为啥人家的观后感貌似说的真的有那么点道理, ...

  4. 两个左连接SQL执行计划解析(Oracle和PGSQL对比):

    上一篇解析链接如下: https://www.cnblogs.com/wcwen1990/p/9325968.html 1.SQL示例1: SQL> select * from ( select ...

  5. Jmeter-----参数配置

    参数化配置: 设置为3个线程后,三个用户均能运行

  6. Zookeeper运维问题集锦

    实际工作中用到Zookeeper集群的地方很多, 也碰到过各种各样的问题, 在这里作个收集整理, 后续会一直补充; 其中很多问题的原因, 解决方案都是google而来, 这里只是作次搬运工; 其实很多 ...

  7. 对不可描述的软件安装sfbo插件

    0 后来...突然有一天,我就需要sfbo了. 1 安装 yum search "不可描述插件"是空的,只能用源码安装. 官方信息可以链接到这里,obfs. 1.1 编译安装 gi ...

  8. bug和注意事项

    bug: 1.新增角色,在选择权限树的时候,如果不选择根目录下的第一个节点,保存后,权限树会打不开. 2.文档页面有两个大字段,即ueditor编辑器的时候,保存后回显会有问题 不过一个页面有两个大文 ...

  9. jsp的环境搭建

    JSP : 动态网页 一.静态和动态的区别: 1.是否会随着时间.地点.用户操作的改变而改变. 2.动态网页需要使用服务器端的脚本语言(JSP) 二.BS CS 1.CS:QQ.微信.CS游戏. 缺点 ...

  10. vi检索

    / :检索 n    :向下执行上一步的检索 N   :向上执行上一步的检索