一套网络配置随时随地上网

在家,公司座位,公司会议室,公司的角落,客户现场,酒店...等所有地方,你都要配置一遍自己的网卡以保证和所处地点的配置一致,这太烦人了!能不能有一种方式免除这种繁琐配置呢?在这个落后的自给自足的DIY时代,对于男耕女织作坊内的耕耘者来讲,答案无疑是肯定的!

sggw模块DIY方案

OpenVPN以及其它IP层VPN的完全链路层处理的实现》中介绍了一种自动将包回复到发起者的一种方法,其实就是“从哪里来的包在收到其回复包时自动发送到相同的地方”,这个patch module连同ARP代理可以实现即时上网!也就是说,在不启用DHCP时,再也不用换一个地方配一遍IP了,虽然Macbook可以将这件事映射成“位置”这个配置,但是为了一些不常去的地方保留一个“位置”,也不是很好。注意,我这里说的是路由器端的实现,而不是笔记本的实现。具体怎么做呢?
1.路由器开启ARP代理(周末在家试了下,仅开始代理没有成功,也没有查出什么原因,于是对arp_process函数做了点手脚,简化了流程)。
2.路由器安装上述的
sggw模块。
3.路由器在WAN口做MASQUERADE地址转换。
试想一个场景,路由器的LAN口配置为1.1.1.1/24,WAN口为2.2.2.2/24,接入路由器LAN口的笔记本IP为192.168.1.34/24,默认网关为192.168.1.254,它想访问WAN,比如IP为128.129.1.1,于是寻址默认网关,因路由器有ARP代理,故而回复了ARP请求,于是数据包发给了路由器,此时 sggw模块将这个连接记录了下来,待回复包到达路由器的时候, sggw模块将其发给笔记本!
        也就是说,即使你的笔记本和路由器的LAN不在一个网段,也能正常上网!如果你的所到之处都部署了上面的路由器,那么你就可以只保留一个“位置”了,我的Macbook设置成了公司的“位置”,基于上述的实现,我在家利用公司的位置配置也能上网!但是有一个问题,还以上述为例,万一由于巧合,笔记本的IP和路由器LAN在同一网段怎么办,这时只要真正的网关不在同一网段,或者说真正的网关离笔记本更近以至于路由器的ARP回复可以覆盖掉真正的ARP回复就没有问题,其实这个问题很好解决,解决方式是非技术的,那就是把路由的LAN口地址设置成一些比较奇怪的地址,比如12.32.45.54之类的!注意,它绝不作为目标地址存在,仅仅是一个哨位!
        最后说一下我对arp_process做了什么手脚。不管怎样,笔记本或者PC在发起对网络的访问时,肯定要发ARP请求的,我们知道它是广播的,肯定能到达路由器,既然到了路由器,就能抓到它,从这个ARP请求中,可以得到足够的信息,比如最重要的就是笔记本的IP地址,MAC地址之类的。由于我的BOX仅仅做这个用,于是我的arp_process流程成为:
1.解析ARP请求包,得到发起者IP;
2.看看该IP是否是自己的直连IP,即是否跟自己的LAN网卡处于一个网段;
3.若不是,则直接回复自己的LAN口的MAC地址,若是,则跳到;
4.(此步骤是我开始添加后来删除的)根据发起者的IP添加一条force-onlink路由,网关即该地址;

5.返回;
6.走标准arp_process流程
第4个步骤被我去掉了,因为实在不方便在内核里面加路由删路由,太TM容易panic了!还是将event通过netlink传给用户态好啊!

其它的方案

实际上想达到这个效果,还有另外两个DIY方案以及一个常规但不常用方案,DIY方案中一个是修改内核协议栈的ROUTE模块,另一个是基于conntrack工具提供的event监控,我们一个一个说。
修改内核代码的方案:
我们知道有一种force-onlink路由,即使下一跳不是直连网段也能设置上去,因此它是逻辑上在三层没有直连,物理上是直连的,在没有任何设备开启ARP代理的情况下,ARP只能在物理直连段传播,而所谓的force-onlink路由就是直接针对下一跳发送ARP请求的!
        方案就是,针对每一个接入的笔记本或者PC都设置一条force-onlink路由,比如笔记本的IP为4.4.4.4/24,那么就设置下面一条:
ip route add 4.4.4.4/32 via 4.4.4.4 dev LAN onlink;
但是路由器事先不知道有多少机器要接入,更不知道其IP分别是什么,因此必须使用通配的方式来设置上述的路由,比如:
ip route add autolink via link dev LAN onlink;
注意,上述的autolink和link是需要新支持的标志,就是说在针对WAN进来的数据包查找路由时,看下LAN上是否绑定autolink路由,若是,则下一跳直接设置成目标地址。
基于现有的工具的方案:
只要笔记本想发包,ARP代理导致它必定来到路由器,路由器的ip_conntrack会记录包的源IP地址是多少,这个可以通过以下的命令行来监控:
conntrack -E -e NEW;
既然监控的到,就可以为其设置一条路由,比如监控到源IP为A,那么就执行下面的命令:
ip route add A/32 via A dev LAN onlink;
使用conntrack工具可能会因为延迟带来不可预知的错误,因此可以使用更好的方案,那就是NFQUEUE target,因为QUEUEU是同步的,可以控制在添加好force-onlink路由之前不把QUEUE上来的数据包INJECT回去,注意,和conntrack event监控一样,只需要对NEW包QUEUE即可。
        既然是动态添加,就涉及到了动态删除的问题,可以采用最近最不经常使用的算法,加入GC机制。
常规方案:
落后会带来DIY,等都能流水化了,就没人DIY了,大部分人拿到手的东西是来用的,而不是来折腾的,如果花钱能带来简单,我就决不DIY,大量供货的物品,你也不会花很多钱,我知道,生命有限,应该来折腾的是人生本身,所谓DEBUG THE LIFE,而不能玩物丧志!IPv6天生针对叶子角色的终端就有自动配置的功能!然而对于IPv4,其自动配置虽然RFC也有明确的建议文档,比如Router Advertisement,Router Solicitation,Address XXX等ICMP就是可用的,然而很多主流的系统内核协议栈都没有实现,也许使用DHCP可以更加灵活地控制分配过程以及安全策略吧。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值