为什么需要Linux路由呢,因为那啥啥啥的原因,需要进行那啥啥啥,只有使用iptables、ipset这些工具才能做到完美透明那啥。
为什么要用虚拟机做软路由呢,因为有时候需要将电脑带出去,显然不能就为了个那啥还要在书包里放个路由器。尽管自己组装了个U盘大小的WR703N模块美名曰那啥神器,但没有精力去专门为那啥设计固件,也没设计reset键,万一配置的时候玩坏就把自己墙了。
关于那啥的配置之前已有多篇文章详细写,请自行翻阅。这里只写虚拟机和Windows的配置。
关于虚拟机,首先你需要装个Linux。当然你可以直接用OpenWrt的x86版,但是笔者因为本身就经常使用Linux,所以就直接在常用的发行版上配置了。
为了实现路由功能,我们需要给虚拟机装两个网卡。我们设计第一个网卡eth0用来当wan,第二个网卡eth1用来当lan。在VirtualBox的网络设置里,将网卡1设为桥接网络桥接到电脑用来上网的网卡上(本地连接或无线网络连接),将网卡2设为仅主机(Host-Only)网卡。关于网卡1设为桥接网络而不是NAT网络,因为我们一会儿要让电脑通过虚拟机上网,而让虚拟机直接从上级路由分配IP,NAT的话就反了。关于网卡2,Host-Only就相当于一根网线的两端,一会儿我们就让电脑通过这个网卡连接到虚拟机。
在虚拟机里首先设置两个网卡,例如debian的配置文件是/etc/network/interfaces,设置后/etc/init.d/networking restart。本例中我的配置为:
auto eth0
iface eth0 inet dhcp
auto eth1
iface eth1 inet static
address 192.168.56.1
netmask 255.255.255.0
在通常的桌面发行版中,linux默认是没有开启ip转发功能的,编辑/etc/sysctl.conf将net.ipv4.ip_forward=1取消注释,重启后生效。若想即时生效可以执行一句echo 1 >/proc/sys/net/ipv4/ip_forward。另外,我们使用的路由实际上是NAT网关,需要添加iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE规则以开启NAT转发。
在windows网络设置里,需要将本来用于上网的网卡(本地连接或无线网络连接)的IP地址设为无法上网的地址(如169.254.x.x,默认网关空),否则本机会从上级路由分配到IP与默认网关,这会让windows路由表困惑。然后,由于本例中我没有在虚拟机里安装DHCP服务,故将Host-Only网卡设为固定IP地址192.168.56.2,默认网关192.168.56.1,DNS可设为到常用的8.8.8.8、223.5.5.5、114.114.114.114等,如果虚拟机有安装DNS服务也可设到192.168.56.1。
此时电脑应当可以通过虚拟机上网。随后开启win7的无线承载网络以实现无线AP,注意有些老旧的无线网卡可能不支持承载网络,或不支持同时用作上网和开启AP。
netsh wlan set hostednetwork allow SSID KEY
netsh wlan start hostednetwork
最后打开Host-Only网卡的属性,在共享选项卡里将该连接共享到开启无线承载网络时添加的虚拟无线网卡上(一般为无线网络连接2),此时该虚拟网卡的IP会被自动设置为192.168.137.1,连接的设备会由windows分配到这个网段的IP并进行一次NAT。由于这个虚拟无线网卡不能设置桥接,所以只能通过windows internet共享接入网络。
实际的效果相当于设备经过192.168.137.1、192.168.56.1、192.168.1.1三次路由后到达外网。设备访问电脑可以用192.168.137.1这个IP,电脑和linux可用192.168.56.1、56.2互相访问。