之前买了台二手服务器,总觉得应该让它发挥点什么作用,正好针对学校蛋疼的网络,先试试能不能把它当做一台超级智能路由器吧~:)
系统:Ubuntu Server 14.04 64bit
设置无线AP
使用的设备是TP-Link TL-WDN4800,配合hostapd
实现软AP功能,实现方法参考以下几篇文章:
linux软AP--hostapd+dhcpd
My Wi-Fi access point revisited
Setting up a Wireless Access Point with Ubuntu Raring Ringtail
我使用的hostapd
的配置文件如下:
1 | interface=wlan0 |
完整的hostapd
配置文件说明可以参考:
配置好后使用service hostapd restart
启动服务即可。
不过以上配置应该并不是最优配置,TL-WDN4800最高传输速率450Mbps,然而之后实际测试得到的速率只有30Mbps左右。
配置DHCP服务器
为无线AP添加DHCP服务。
安装DHCP服务
1 | apt-get install isc-dhcp-server |
配置DHCP网卡
修改/etc/default/isc-dhcp-server
文件,根据注释说明添加对应网卡即可,可以添加不止一个,此处以wlan0
为例:
1 | INTERFACES="wlan0" |
修改DHCP配置文件
修改/etc/dhcp/dhcpd.conf
文件,根据注释修改即可:
1 | ddns-update-style none; |
以上是最基本的配置方法,各种高级配置可参考注释说明。
配置本机IP
DHCP服务器本身显然是不能再配置为动态获取IP的,需要配置为静态IP的形式。修改/etc/network/interfaces
文件,如:
1 | iface wlan0 inet static |
重启DHCP服务
1 | service isc-dhcp-server restart |
此时客户端配置为自动获取IP即可。
通过VPN拨号连接校园网
根据学校网络中心的说明文件配置即可。
配置静态IP
修改/etc/network/interfaces
文件:
1 | iface eth0 inet static |
安装xl2tpd
1 | apt-get install xl2tpd |
修改配置文件
配置/etc/xl2tpd/xl2tpd.conf
文件,在最后加入以下代码:
1 | [lac ZJU_VPN] |
创建/etc/ppp/options.xl2tpd.zju
文件:
1 | noauth |
保存用户名与密码,修改/etc/ppp/chap-secrets
文件,在最后添加:
1 | g199209@a * 00000000 * |
其中00000000
替换为真实的密码。
启动服务与停止服务
连接:
1 | service xl2tpd start |
连接成功后,使用ifconfig
命令可以看到ppp0
接口:
1 | ppp0 Link encap:Point-to-Point Protocol |
其中的inet addr
就是虚拟局域网IP地址。
断开连接:
1 | echo 'd ZJU_VPN' > /var/run/xl2tpd/l2tp-control |
修改路由表
添加两条记录即可,首先将发往VPN服务器的流量通过本地网关发送:
1 | route add -host 10.5.1.7 gw 10.12.218.1 dev eth0 |
默认流量都通过ppp0
发送:
1 | route add default gw 222.205.109.222 dev ppp0 |
此处的网关就是之前看到的ppp0
的IP地址。
需要将矛盾的路由记录删除掉,比如只要保留一条默认记录就可以了。
使用手机USB共享提供4G网络连接
本来想买个4G USB网卡的,然而价格都太贵……之前一直用一个闲置的Nexus手机做无线AP的,其实可以使用USB网络共享(USB Tethering)功能,把手机当成一个4G网卡用的。将手机与电脑连起来,在手机上开启USB网络共享功能,使用lsusb
命令可以查看手机是否正常连接上了,若成功连接的话,会有显示:
1 | Bus 001 Device 009: ID 18d1:4ee4 Google Inc. Nexus 4 (debug + tether) |
显示tether
的话就说明共享成功了,使用ifconfig -a
命令可以看到一个名为usb0
的网络设备:
1 | usb0 Link encap:Ethernet HWaddr aa:e3:b2:da:e7:27 |
不过可以看到,此时还没有正确分配IP地址,使用dhcpcd usb0
命令从手机DHCP服务器上获取一下IP地址即可,再使用ifconfig
命令即可看到usb0
已经获得正确的IP地址了。使用route -n
命令可以看到此时也自动添加了路由表。
添加路由转发
路由器最重要的功能就是路由转发啦,Linux内核本身就支持这一功能,这在之前写的Ubuntu虚拟机中设置NAT使树莓派开发板可以联网一文中介绍了实现方法,大概就是在/etc/sysctl.conf
文件中开启IP转发功能,之后在iptables
中添加一条MASQUERADE
规则即可,文末参考资料中鸟哥的文章里对此有详细介绍。
如果要使用有线网上网:
1 | iptables -t nat -A POSTROUTING -s 192.168.137.0/24 -o ppp0 -j MASQUERADE |
如果要使用4G网络上网:
1 | iptables -t nat -A POSTROUTING -s 192.168.137.0/24 -o usb0 -j MASQUERADE |
自动连接脚本
以上操作可以写成一个脚本文件,方便在校园网和4G网络间切换。
连接至校园网
1 |
|
连接至4G网络
1 |
|
使用以上方法配置好后,笔记本通过无线连接,电脑即可正常上网了,此时服务器就相当于一台路由器,只是目前4G和校园网还是独立的,要更改连接需要自己手动输入命令,之后进一步研究下如何实现更高级的策略路由。
参考资料:
Ubuntu下DHCP服务器的配置
Linux 的封包过滤软件: iptables
第八章、路由观念与路由器设定
linux 添加静态路由
在多种系统下通过USB连接android手机上网
USB Tethering on Linux
linux 路由表设置 之 route 指令详解