有时候,你仅仅有一个IP地址,然而却有多台设备,比如公司配发的电脑,自己的笔记本电脑,手机,iPad等,显然公司配发的电脑将是你的这个IP的第一优先占有者,其它的设备将无法接入。如果你手上有一个带有WIFI模块的Linux BOX,你可能会想到建立二级路由,然而此时你的那台公司配发的机器就会被隐藏在这个BOX后面,如果你的BOX在WAN口做了基于状态的MASQURADE地址转换,那么所有针对你的被隐藏的工作机的主动访问都将不可能,除非你配置复杂的DNAT规则或者路由规则。
        现在,事情不同了,你可以将这个唯一的IP地址配置在你的工作机上的同时,也可以让所有的其它设备使用。

步骤:

现在假设你的BOX有三个网口,分别是两个以太口:eth0,eth1以及一个WIFI口:wlan0,下面是一系列的操作:
你拥有的唯一IP及其配套配置:
地址:192.168.10.79/24
网关:192.168.10.1
1.桥接所有这些口

brctl addbf br0
brctl addif br0 eth0
brctl addif br0 eth1
brctl addif br0 wlan0

2.为br0配置一个IP地址供WIFI使用(省略DHCP POOL以及DNS的配置过程)
接入设备数量限制一下:
ifconfig br0 172.20.1.1/28
3.可选1:为br0增加一个Secondary IP以便成功增加默认路由
ifconfig br0:0 192.168.10.255/23
注意,以上的prefix 23值得说明一下,原始的子网的掩码是255.255.255.0,现将prefix减少1位,此时你就可以使用原始网络中的broadcast地址作为一个IP地址了,这个地址不会和任何地址冲突。
route add default gw 192.168.10.1
4.可选2:使用force-onlink路由直接强制增加路由
ip route add 0.0.0.0/0 via 192.168.10.1 dev br0 onlink
5.增加地址转换规则,凡是WIFI包的源地址都转换成你唯一的那个IP地址
iptables -t mangle -A PREROUTING -m physdev --physdev-in wlan0 -j MARK --set-mark 100
iptables -t nat -A POSTROUTING -m mark --mark 100 -j SNAT --to-source 192.168.10.79

6.可选2的情况下增加arp
由于使用了force-onlink路由,意味着你的BOX上没有和192.168.10.0/24处于同网段的IP地址,那么当往192.168.10.1这个默认网关发包的时候,ARP请求将可能得不到回复,这涉及到默认网关的arp_filter或者等价配置的配置情况,因为arp请求的源是唯一的172.20.1.1这个地址,请求的是地址和它不在一个网段!
因此需要一条arptables规则:
arptables -t mangle -A OUTPUT -d  192.168.10.1  -j mangle --mangle-ip-s 192.168.10.79
事实上在可选1的情况下,你配置了一个192.168.10.255这个地址,对于原始网段来讲,它是一个广播,但是对于BOX来讲,它是一个常规IP,因此ARP请求可以发出,封装的源就是192.168.10.255,也可以正常回来,因为请求中的源是192.168.10.255,到达默认网关192.168.10.1后,与其掩码255.255.255.0相与得到192.168.10.0/24,显然属于同一个网段,检查通过,REPLY返回!

效果:

整个BOX对于你的工作机就是一个HUB,它的工作毫不受到影响!另外BOX上的WIFI独自引出了一个子网,可以让多个设备接入,当这些设备发出的数据包外出时,BOX会将其源IP地址转换为你那唯一的IP地址,ip_conntrack机制可以保证所有的这些设备相关的流的五元组不会重复。

本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1268835

iptables/arptables实现单IP一级二级路由相关推荐

  1. 有关于路由的基础使用(一级路由和二级路由)

    一.路由 1.定义 node中的路由:web服务器根据用户输入的不同url地址,来返回不同的页面. vue中路由:路由是vue.js中的一个路由组件,需要结合组件来实现单页面应用. 2.路由的使用(一 ...

  2. Vue一级路由与二级路由/路由重定向

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  3. vue项目的一级路由和二级路由的理解

    vue项目的一级路由和二级路由的理解

  4. 家用带宽二级路由openwrt设置ipv6

    拓扑结构,中国移动家庭智能网关GS3101 + OpenWrt GCC 5.3.0 12009 GS3101 为一级主路由,是光猫直接拨号,通过GS3101到一个lan口接到openwrt的wan口. ...

  5. OpenWrt-DreamBox 20120201下设置二级路由

    RG100A-AA刚刷的openwrt-Dreambox20120201,想使用RG100A-AA做一个二级路由,一级路由lan口使用DHCP动态分配IP. 1.使用浏览器登录管理界面,在接口中wan ...

  6. vlan跨交换机 udp广播_划分VLAN和接二级路由都能阻止广播风暴?两者有什么区别?...

    交换机默认接口属于VLAN1属于同一个广播域,端口划分VLAN一般用于交换机隔离广播,交换机用于高速数据转发,路由器每个接口都是一个广播域,路由器主要用于路由查找,还是有一定的区别. 我从事网络管理的 ...

  7. 易语言单窗口单ip软件源码_梦幻西游怎样多开ip转金?十大攻略秘籍速来看

    各位好!,我依然是小芝麻,近期几日总是有盆友在私聊我,"小芝麻看着你的转金专缉,那么多方式,能够 帮我建议一类,最安全可靠能用的吗?""小芝麻,你的转金攻略大全,我有点儿 ...

  8. vue2路由手动创建二级路由路由传参路由守卫打包上线

    路由手动配置: #在@vue/cli创建的项目中,路由用法如下. 1.安装路由npm install vue-router@32:定义路由所需的组件(.vue文件)要实现页面about 和home两个 ...

  9. 路由器级联方式(二级路由为例)

    这两天由于路由器出了点问题导致网络连接一直不顺畅.出现的问题是二级路由只能一台电脑连上.其他设备无法连上二级路由. 路由器的级联应用场景:一个网络帐号,门口有一个入口有线路由器,分出网线到各个房间.房 ...

  10. openwrt二级路由wan口如何设置

    openwrt 跟其他一些路由系统不一样,其他一些路由系统会直接翻译为动态地址给你选择,对应就有静态地址.但openwrt 一看协议里头根本就没有什么动态地址选项给你(但还是有静态地址给你选),这时你 ...

最新文章

  1. js 算法排序总结
  2. 1.7 Appium依赖添加
  3. mysql st_contains实现_MySQL实现树状所有子节点查询的方法
  4. 2010年过年左右时的艾米果
  5. html中怎么让字体闪烁,HTML最简单的文字闪烁代码
  6. centos mysql压缩文件直接恢复_CentOS下利用mysqlbinlog恢复MySQL数据库
  7. 开启es6——搭建开发环境
  8. 5.企业安全建设指南(金融行业安全架构与技术实践) --- 安全团队建设
  9. android 界面布局
  10. AsyncTask的基本使用
  11. fluidsim win7版本_FluidSIM 5|FluidSIM(液压气动仿真软件)下载v5.0中文免费版 附安装教程 - 欧普软件下载...
  12. mysql查出同义词_在数据库mysql中存储和检索同义词的最佳方法
  13. 企业logo添加到word的模板制作
  14. 算法时间复杂度的计算:从几道题目讲起
  15. 解释深度学习在安全领域中的应用
  16. redis key过期通知
  17. 顺丰菜鸟大战 本质是以数据获得企业竞争壁垒
  18. 【硬件】美光DDR上丝印和型号对应关系
  19. drtek收音机使用说明_车载收音机按键图解说明,老式车载收音机说明书
  20. PC虚拟现实应用的性能分析与优化:从CPU角度切入

热门文章

  1. 再造轮子之网易彩票-第一季(IOS 篇 by sixleaves)
  2. VJ 1490 小菜的数码验证
  3. 转liunx 常用命令
  4. 152-Maximum Product Subarray
  5. 优秀程序员必须知道的八件事情
  6. python——socket网络编程
  7. linux c 笔记-1
  8. Swing 设置无边框Frame
  9. 判断坐标在矩阵的哪个(资源带)圈范围
  10. ng-repeat动态生成的DOM如何获取宽度(封装好的方法)