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

有客户的需求是:

描述下需求:现今有一个控制设备,里面有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 5060 -j DNAT --to-destination 192.168.0.121:5060iptables -t nat -A POSTROUTING -s 192.168.0.121/24 -j SNAT --to 192.168.0.194

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

我们来分析下脚本:

iptables :四张表+五条链+规则组成
表:    1.nat        地址转发规则2.mangle        访问控制,规则匹配3.raw        数据博状态跟踪与分析4.filter        修改数据包,改变包头中的内容
链:    1.INPUT            到达本机内部的报文的位置2.OUTPUT        由本机内部发出的报文的位置  路由本机要发给目标的IP3.FORWARD        由本机转发的报文的位置4.PREROUTING    报文进入本机的路由前的位置5.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 1 > /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/24 dev eth1 table local_network proto static scope link;#这句不明白什么意思,知道是网友可以留言告诉我ifconfig eth1:1 192.168.100.4 netmask 255.255.255.0 up;#给eth1绑定第二个网卡iptables -t nat -A POSTROUTING -o wlan0 -s 192.168.100.0/24 -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.4busybox 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

转载于:https://www.cnblogs.com/inkhearts/p/10479074.html

MTK 使用iptable 命令来完成网络路由(android WIFI/4G分享网络)相关推荐

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

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

  2. USB共享网络流程分析和自动分享网络给PC

    1.点击网络共享菜单处理流程 类:TetherSettings.java public boolean onPreferenceTreeClick(PreferenceScreen screen, P ...

  3. android检测手机网络连接不上,Android WIFI及手机网络连接情况检查

    手机开发时会涉及到一些需要网络或wifi的操作,有时需要了解情况在进行下一步的操作,如没有网络则用本地缓存,没有wifi则不进行大流量操作(更新APP等). 这里我就说一下我在开发时用到的相关代码. ...

  4. Android Wifi开发——室内网络(十八)

    一.功能简介 1.基础概念 WiFi RTT 功能是 Android P 新引入的一个功能,主要用于在室内定位.WiFi RTT 是全新的功能,借助 AP 热点或 WiFi,利用 RTT 原理完成测距 ...

  5. 片上网络路由算法综述

    一. 片上网络概述   在半个多世纪以来,半导体工业一直遵循着"摩尔定律"发展,即集成电路上可容纳的晶体管数目,约每隔两年便会增加一倍.截至目前,处理器中的晶体管数量最多已达到了上 ...

  6. Android常用的网络权限,Android常用的权限大全

    Android的常用权限 访问网络 android.permission.INTERNET 访问网络连接可能产生GPRS流量 写入外部存储 android.permission.WRITE_EXTER ...

  7. 网络常用命令----抓包,路由

    文章目录 ping命令 常用操作 1.ifconfig命令 2.route命令 启用route服务 2.1临时配置 2.2永久生效route路由 3.netstat命令 4.ip命令 5.ss命令 6 ...

  8. Linux网络路由简介-查看网络路由

    本文对用于理解简单环境的Linux计算机的路由进行了非常简短的介绍. linux 查看网络路由 连接到网络的每台计算机在离开本地主机时都需要针对网络TCP / IP数据包的某种路由说明. 这通常非常简 ...

  9. Linux 网络路由介绍

    from: Linux 网络路由介绍 六月份的时候我们讨论了基础网络配置,其中有一点我没提到的是路由.这篇文章将简洁明了的介绍下Linux网络下的路由,来方便理解一些简单的网络环境. 每台网络中相连的 ...

最新文章

  1. 神经学家探寻:机器如何拥有意识!如何避免机器人伤害我们!
  2. NIS服务器介绍及搭建
  3. matlab的index函数,写论文第九天:MATLAB之rsindex函数
  4. leetcode 在排序数组中查找元素的第一个和最后一个位置
  5. java html中引入视频的格式_怎么在HTML网页中插入视频
  6. power designer 连接数据库提示“connection test failed”
  7. HDLBits答案(8)_Verilog半加器、全加器和行波进位加法器原理与设计
  8. spi 协议驱动设计
  9. 如何在ASP.NET Core中使用Azure Service Bus Queue
  10. Metasploit Framework命令汇总
  11. 剑指offer:55-58记录
  12. 超级灰色按钮克星更新v1.3.1112.40
  13. java 加入环境变量_JAVA添加环境变量
  14. 弹窗php整人_vbs无限弹窗 无敌弹窗整人VBS代码 - 电脑常识 - 服务器之家
  15. 【NLP】文本分类算法-基于字符级的无词嵌入双向循环神经网络(双向 GRU)
  16. 成长的思考:如何在工作中保持高速的自我成长
  17. 接口测试流程是怎样的?
  18. 蓝桥杯单片机设计与开发历届客观题答案
  19. 奥运了,愿明天会更好
  20. 谈谈实习第一天的感受

热门文章

  1. 饿了么建生鲜开放平台 买菜业务要推至全国500城
  2. 小程序实现圆点边框 解决 dotted不兼容 小程序圆点边框兼容问题 如何在小程序实现兼容的圆点边框
  3. 深入浅出AT命令(5)-短信命令
  4. C/C++播放音乐的函数的学习
  5. [02]时区时间获取
  6. 论文阅读:CVPR 2022 Object Localization under Single Coarse Point Supervision
  7. matlab加速度转化为位移,加速度转换成位移的matlab代码及说明
  8. Android 蓝牙手柄 延迟,安卓免设置,0.15s低延迟,飞智银狐蓝牙耳机体验
  9. JAVA使用RXTX编写串口调试工具-代码分析
  10. 机器学习数据分析极简思路及sklearn算法小试