wifi热点共享 3G网络
本文描述一些iptables的基础知识和使用方法。最后记录一个wifi共享3G上网,以及禁止wifi内某个IP通过3G联网的例子。
一、
在Linux系统中,防火墙,网址转换(NAT),数据包记录以及流量统计这些功能是由Netfilter子系统所提供的,而iptables是控制Netfilter的工具。
在使用iptables前,需要先了解一下三种网络数据流向。它们分别是:
1、网卡 à 本地程序
2、本地程序 à 网卡
3、网卡A à 网卡B(A和B均接入本机)
网络数据从网卡进来后,在传输过程中,将经过iptables中设置的表,和节点/链(chain),而恰恰是在这些表和链中,我们可以设置规则,或修改信息头内容,或重定向,或转发,以达到防火墙、NAT,记录track等的功能。
每一个数据流方向都有不同的表组成,其中的chain也会有所不同。
二、主要的表:
|
Table (表名) |
Explanation (注释) |
|
nat |
nat表的主要用处是网络地址转换,即Network Address Translation,缩写为NAT。做过NAT操作的数据包的地址就被改变了,当然这种改变是根据我们的规则进行 的。属于一个流的包只会经过这个表一次。如果第一个包被允许做NAT或Masqueraded,那么余下的包都会自 动地被做相同的操作。也就是说,余下的包不会再通过这个表,一个一个的被NAT,而是自动地完成。这就 是我们为什么不应该在这个表中做任何过滤的主要原因,对这一点,后面会有更加详细的讨论。PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。OUTPUT链改变本地产生的包的目的地 址。POSTROUTING链在包就要离开防火墙之前改变其源地址。 |
|
mangle |
这个表主要用来mangle数据包。我们可以改变不同的包及包 头的内容,比如 TTL,TOS或MARK。 注意MARK并没有真正地改动数据包,它只是在内核空间为包设了一个标记。防火墙 内的其他的规则或程序(如tc)可以使用这种标记对包进行过滤或高级路由。这个表有五个内建的链:PREROUTING,POSTROUTING, OUTPUT,INPUT和 FORWARD。PREROUTING在包进入防火墙之后、路由判断之前改变 包,POSTROUTING是在所有路由判断之后。OUTPUT在确定包的目的之前更改数据包。INPUT在包被路由到本地 之后,但在用户空间的程序看到它之前改变包。FORWARD在最初的路由判 断之后、最后一次更改包的目的之前mangle包。注意,mangle表不能做任何NAT,它只是改变数据包的 TTL,TOS或MARK,而不是其源目地 址。NAT是在nat表中操作的。 |
|
filter |
filter表是专门过滤包 的,内建三个链,可以毫无问题地对包进行DROP、LOG、ACCEPT和REJECT等操作。FORWARD 链过滤所有不是本地产生的并且目的地不是本地(所谓本地就是防火墙了)的包,而 INPUT恰恰针对那些目的地是本地的包。OUTPUT 是用来过滤所有本地生成的包的。 |
三、数据流路径与表格
1、发往本地应用程序
|
Step(步骤) |
Table(表) |
Chain(链) |
Comment(注释) |
|
1 |
在线路上传输(比如,Internet) |
||
|
2 |
进入接口 (比如, eth0) |
||
|
3 |
mangle |
PREROUTING |
这个链用来mangle数据包,比如改变TOS等 |
|
4 |
nat |
PREROUTING |
这个链主要用来做DNAT。不要在这个链做过虑操作,因为某 些情况下包会溜过去。 |
|
5 |
路由判断,比如,包是发往本地的,还是要转发的。 |
||
|
6 |
mangle |
INPUT |
在路由之后,被送往本地程序之前,mangle数据包。 |
|
7 |
filter |
INPUT |
所有以本地为目的的包都要经过这个链,不管它们从哪儿 来,对这些包的过滤条件就设在这里。 |
|
8 |
到达本地程序了(比如,服务程序或客户程序) |
2、本地应用程序往外发送
|
Step |
Table |
Chain |
Comment |
|
1 |
本地程序(比如,服务程序或客户程序) |
||
|
2 |
路由判断,要使用源地址,外出接口,还有其他一些信息。 |
||
|
3 |
mangle |
OUTPUT |
在这儿可以mangle包。建议不要在这儿做过滤,可能有副作 用哦。 |
|
4 |
nat |
OUTPUT |
这个链对从防火墙本身发出的包进行DNAT操作。 |
|
5 |
filter |
OUTPUT |
对本地发出的包过滤。 |
|
6 |
mangle |
POSTROUTING |
这条链主要在包DNAT之后(译者注:作者把这一次DNAT称作 实际的路由,虽然在前面有一次路由。对于本地的包,一旦它被生成,就必须经过路由代码的处理,但这个 包具体到哪儿去,要由NAT代码处理之后才能确定。所以把这称作实际的路由。),离开本地之前,对包 mangle。有两种包会经过这里,防火墙所在机子本身产生的包,还有被转发的包。 |
|
7 |
nat |
POSTROUTING |
在这里做SNAT。但不要在这里做过滤,因为有副作用,而且 有些包是会溜过去的,即使你用了DROP策略。 |
|
8 |
离开接口(比如: eth0) |
||
|
9 |
在线路上传输(比如,Internet) |
3、网卡间转发
|
Step |
Table |
Chain |
Comment |
|
1 |
在线路上传输(比如,Internet) |
||
|
2 |
进入接口(比如, eth0) |
||
|
3 |
mangle |
PREROUTING |
mangle数据包,,比如改变TOS等。 |
|
4 |
nat |
PREROUTING |
这个链主要用来做DNAT。不要在这个链做过虑操作,因为某 些情况下包会溜过去。稍后会做SNAT。 |
|
5 |
路由判断,比如,包是发往本地的,还是要转发的。 |
||
|
6 |
mangle |
FORWARD |
包继续被发送至mangle表的FORWARD链,这是非常特殊的情 况才会用到的。在这里,包被mangle(还记得mangle的意思吗)。这次mangle发生在最初的路由判断之后, 在最后一次更改包的目的之前(译者注:就是下面的FORWARD链所做的,因其过滤功能,可能会改变一些包 的目的地,如丢弃包)。 |
|
7 |
filter |
FORWARD |
包继续被发送至这条FORWARD链。只有需要转发的包才会走 到这里,并且针对这些包的所有过滤也在这里进行。注意,所有要转发的包都要经过这里,不管是外网到内 网的还是内网到外网的。在你自己书写规则时,要考虑到这一点。 |
|
8 |
mangle |
POSTROUTING |
这个链也是针对一些特殊类型的包(译者注:参考第6步, 我们可以发现,在转发包时,mangle表的两个链都用在特殊的应用上)。这一步mangle是在所有更改包的目 的地址的操作完成之后做的,但这时包还在本地上。 |
|
9 |
nat |
POSTROUTING |
这个链就是用来做SNAT的,当然也包括Masquerade(伪 装)。但不要在这儿做过滤,因为某些包即使不满足条件也会通过。 |
|
10 |
离开接口(比如: eth0) |
||
|
11 |
又在线路上传输了(比如,LAN) |
3、网卡间转发
|
Step |
Table |
Chain |
Comment |
|
1 |
在线路上传输(比如,Internet) |
||
|
2 |
进入接口(比如, eth0) |
||
|
3 |
mangle |
PREROUTING |
mangle数据包,,比如改变TOS等。 |
|
4 |
nat |
PREROUTING |
这个链主要用来做DNAT。不要在这个链做过虑操作,因为某 些情况下包会溜过去。稍后会做SNAT。 |
|
5 |
路由判断,比如,包是发往本地的,还是要转发的。 |
||
|
6 |
mangle |
FORWARD |
包继续被发送至mangle表的FORWARD链,这是非常特殊的情 况才会用到的。在这里,包被mangle(还记得mangle的意思吗)。这次mangle发生在最初的路由判断之后, 在最后一次更改包的目的之前(译者注:就是下面的FORWARD链所做的,因其过滤功能,可能会改变一些包 的目的地,如丢弃包)。 |
|
7 |
filter |
FORWARD |
包继续被发送至这条FORWARD链。只有需要转发的包才会走 到这里,并且针对这些包的所有过滤也在这里进行。注意,所有要转发的包都要经过这里,不管是外网到内 网的还是内网到外网的。在你自己书写规则时,要考虑到这一点。 |
|
8 |
mangle |
POSTROUTING |
这个链也是针对一些特殊类型的包(译者注:参考第6步, 我们可以发现,在转发包时,mangle表的两个链都用在特殊的应用上)。这一步mangle是在所有更改包的目 的地址的操作完成之后做的,但这时包还在本地上。 |
|
9 |
nat |
POSTROUTING |
这个链就是用来做SNAT的,当然也包括Masquerade(伪 装)。但不要在这儿做过滤,因为某些包即使不满足条件也会通过。 |
|
10 |
离开接口(比如: eth0) |
||
|
11 |
又在线路上传输了(比如,LAN) |
四、wifi共享3G上网
假设我们有一个wifi网卡wlan0,3G网卡ppp0。那么拨号成功后,ppp0将有自己的IP,可以连接外网。wifi作为热点,所有接入它的设备将在同一局域网内,但明显和ppp0不在同一个网段。我们假设其为192.168.5.0网段。
那么我们需要把从wlan0接收到的网络请求数据都转发到ppp0,并且把自己伪装成从ppp0发出的数据。
明确了数据流的流向,就等于知道了这个链路上的有哪些表和链。那么我们首先选择nat表,因为只有它能做网址转换,然后更深入,我们知道这个过程中,nat表的PREROUTING这个链是具体实现“伪装”功能的。
具体做法:
1、使能转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
2、设置转发表nat
iptables -t nat -A POSTROUTING -s 192.168.5.1/24 -p tcp -j MASQUERADE -o ppp0
iptables -t nat -A POSTROUTING -s 192.168.5.1/24 -p udp -j MASQUERADE -o ppp0
-t后面的参数指定哪个表格进行修改,我们选择nat
-A说明规则添加的方式,append“追加”
POSTROUTING,说明修改的chain
-s是匹配规则中的一种,表示来源IP
192.168.5.1/24 à 192.168.5.*
-p 是网络协议
-j jump,指跳转哪个target进行处理
MASQUERADE是伪装,它自动检测出口的ip,然后将192.168.5.0网段的数据请求伪装成从ppp0发出的数据请求
-o 出口网卡
五、禁止个别IP
再次审视网卡间转发的数据流流向。我们看到其中的filter表允许我们在FORWARD的chain里做过滤。
如果某个设备发送的网络请求被过滤掉了,不能正常发往外网,那么就是禁止它通过3G网络上网。所以,我们需要在FORWARD的chain里匹配过滤掉来自那个设备IP的数据包,不允许转发到ppp0。
假设该设备的IP是192.168.5.100
iptables –t filter –A FORWARD –s 192.168.5.100 –j REJECT

wifi热点共享 3G网络的更多相关文章
- 【转载】华为荣耀V9手机如何设置WiFi热点共享
有时候我们在电脑的时候发现没有无线网络以及有线网络,如果你的手机有相应网络,并且流量足够(当前很多手机流量套餐都是不限量了),可以开启手机上的Wifi热点进行流量共享使用,开启Wifi流量热点后,电脑 ...
- win10打开自带wifi热点共享
win10打开自带wifi热点共享 第一步,打开网络和Internet设置 二. 找到移动热点
- 【其他】win7创建wifi热点共享给手机使用
出门在外,有时候网络有诸多不便,需要用笔记本创建wifi热点给手机用:本人测试xp怎么配置都不好使,但win7有可行的方案,不依赖第三方软件. 详述如下: 场景一:win7 + A(PC机)(用无线连 ...
- 为Ubuntu笔记本电脑设置WiFi热点共享上网
该文由土木坛子转译而来,说是转译,其实看截图就可以方便的设置,没有任何命令,全是图形界面,方便容易.我们都知道怎样在 windows 7 系统上如何设计 Wifi 热点,当你只有一条网线,多台计算机的 ...
- 为Ubuntu笔记本电脑创建WiFi热点共享上网
from: linux公社 http://www.linuxidc.com/Linux/2014-02/97139.htm 该文由土木坛子转译而来,说是转译,其实看截图就可以方便的设置,没有任何命 ...
- 热点共享SS网络
# 测试系统: Ubuntu 16.04 LTS-lxde-ARM # ***-libev 安装脚本源于 秋水逸冰: https://teddysun.com/358.html # ss-tproxy ...
- Win8共享wifi热点设置
Win8共享wifi热点如何设置?大家都知道win7系统可以实现wifi热点共享,那么win8应该也能实现wifi热点共享,那么如何设置win8不需要任何软件只需要对电脑进行设置就可以共享无线上网. ...
- Win8开虚拟wifi ‘无法启动承载网络 组或资源的状态不是执行请求操作的正确状态“
第一步,首先我们点开开始按钮菜单,要右键以“管理员身份”打开CMD“命令提示符”并键入或者复制(粘贴)命令:netsh wlan show drivers 查看本机无线网卡是否支持此项Wifi热点共享 ...
- [windows]win7设置wifi热点
1.启用并设定虚拟WiFi网卡:netsh wlan set hostednetwork mode=allow ssid=whylaughing key=124025621 2.开启无线wifi网络: ...
随机推荐
- Studio之版本管理工具Git (图文教程)
目前业界主流的版本管理工具主要是 svn/git.svn是1种集中式的代码管理工具,而git是1种散布式的代码管理工具,广受极客的爱好.而基于git的github更是全宇宙码农的提高逼格,深究技术的必 ...
- CentOS配置网卡,重启网络显示:Device does not seem to be present(转载)
From:http://www.cnblogs.com/fbwfbi/archive/2013/04/29/3050907.html 一.故障现象: [root@c1node01 ~]# servic ...
- Porlet标准:JSR168/JSR286/WSRP(转载)
From:http://www.iteye.com/topic/620213 Portlet标准主要是JSR168,JSR286和WSRP. JSR168因为比较早,所以大部分的Portal都支持这个 ...
- C++学习14 继承的概念及语法
继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承(例如儿子继承父亲财产)类似. 继承(Inheritance)可以理解为一个类从另一个类获取成员变量和成员函数的过程.例如类B继承于 ...
- [Flex] ButtonBar系列——皮肤和外观设置
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...
- java利用过滤器实现编码的转换,内容输出的替换
在页面建个表单 <form action="login.do" method="post"> <input type="text&q ...
- java重写
1.当子类重写父类方法时,修改方法的修饰权限只能从小的范围到大的范围改变,不能从大的范围向小的范围改变,public protected private,[权限篇] 2.子类重写父类方法还可以修改 ...
- windows下如何使用makefile编译
1. 编写makefile. 2. 使用nmake进行编译, vs2010或者其他都是用nmake进行编译的,将bin目录添加到path环境变量中 先执行vcvars32.bat 再执行nmake
- 下一代大数据系统和4S标准
大数据行业发展到今天,它创造的价值和带来的社会效应,大家已经看得很明白,同时很多问题和不足也暴露出来,特别是hadoop能够提供的数据处理能力,现在已经挖掘到极限,但是现在各行业对数据的存储和计算需求 ...
- selenium 速查手册 python版
1.安装与配置 pip install selenium 基本使用selenium都是为了动态加载网页内容用于爬虫,所以一般也会用到phantomjs mac下如果要配置phantomjs环境的话 e ...