linux中打造智能路由功能详解

所需设备清单:

一台自由的主机
一台已经刷了OpenWRT的路由器
一根网线
一个2G的U盘
在此之前请确保你已经有了一台刷过OpenWRT的路由器,然后给路由器上电,通过网线直连,连接路由器:

telnet 192.168.1.1设置密码:

passwd而后退出即可用SSH进行登录了:

exitssh root@192.168.1.1接着修改路由的无线配置,从而可以开启Wifi:

vim /etc/config/wireless注释掉option disabled 1一行,并设置Wifi的加密方式和密码:

 代码如下 复制代码
config wifi-device  radio0
 option type     mac80211
 option channel  11
 option hwmode 11ng
 option path 'platform/ar933x_wmac'
 option htmode HT20
 list ht_capab SHORT-GI-20
 list ht_capab SHORT-GI-40
 list ht_capab RX-STBC1
 list ht_capab DSSS_CCK-40
 # REMOVE THIS LINE TO ENABLE WIFI:
 # option disabled 1
 
config wifi-iface
 option device   radio0
 option network  lan
 option mode     ap
 option ssid     OpenWrt
 option encryption psk2
 option key 'password'

然后修改网络配置:

vim /etc/config/network注释掉option ifname 'eth0'并增加WAN口设置,

 代码如下 复制代码
config interface 'loopback'
 option ifname 'lo'
 option proto 'static'
 option ipaddr '127.0.0.1'
 option netmask '255.0.0.0'
 
config globals 'globals'
 option ula_prefix 'fd48:f746:e8a5::/48'
 
config interface 'lan'
 # option ifname 'eth0'
 option type 'bridge'
 option proto 'static'
 option ipaddr '192.168.1.1'
 option netmask '255.255.255.0'
 option ip6assign '60'
 
config interface 'wan'
 option ifname 'eth0'
 option proto 'dhcp'

而后重启路由,即可通过Wifi连接到路由器,此时将路由通过网线接入网络或者上级路由即可作为一个普通的路由器使用了。

reboot安全模式

如果期间由于IP地址配置错误等原因导致无法连接到路由器,可以进入路由器的安全模式进行恢复:

1、拔掉路由器电源
2、链接电源后使用牙签不断抽插路由器的reset按钮,当路由器的指示灯开始快速闪烁就说明已经进入了安全模式
3、安全模式不会加载任何配置,因此还需要通过最初提到的方式,直连并通过telnet 192.168.1.1连接路由器
4、挂载root分区:mount_root
5、擦除先前的配置:firstboot
6、设置密码:passwd root
7、重启:reboot -f

而后就可以重新开始进行配置了,如果其中通过firstboot擦除配置的过程中遇到错误,可以通过在OpenWRT中重新刷机的方式解决。

准备U盘

我所用的路由只有2MB存储空间,安装OpenWRT之后,空间已所剩无几,如果要安装后续提到的OpenVPN等软件,很明显空间是不够用的,但是我们可以通过路由器的USB接口使用U盘来做扩展。

我这里给2G的U盘分了3个区,1G(primary, bootable, ext4)/500MB(primary, swap)/500MB(primary, ext4),分区完后对其进行格式化,就完成了U盘的准备工作,我是通过Mac中的Ubuntu虚拟机进行下述操作的:

 代码如下 复制代码
cfdisk /dev/sdb
mkfs.ext4 /dev/sdb1
mkswap /dev/sdb2
mkfs.ext4 /dev/sdb3

U盘准备完毕后就可以在路由上安装所需的软件了:

 代码如下 复制代码
opkg update
opkg install kmod-usb2 kmod-fs-ext4
opkg install kmod-usb-storage
opkg install block-mount
reboot

接着重启路由器,而后配置fstab实现U盘分区的自动挂载:

 代码如下 复制代码
reboot
vim /etc/config/fstab

修改如下配置:

 代码如下 复制代码
config 'mount'
 option target /mnt/usb
 option device /dev/sda1
 option fstype ext4
 option enabled 1
 
config 'swap'
 option device /dev/sda2
 option enabled 1
 
config 'mount'
 option target /mnt/home
 option device /dev/sda3
 option fstype ext4
 option enabled 1

而后重启路由器后:

reboot这时候你就可以通过df -h看到分区已经自动挂载了:

 代码如下 复制代码

df -h

Filesystem                Size      Used Available Use% Mounted on
rootfs                    1.1M    632.0K    456.0K  58% /
/dev/root                 1.8M      1.8M         0 100% /rom
tmpfs                    14.1M     72.0K     14.1M   0% /tmp
/dev/mtdblock3            1.1M    632.0K    456.0K  58% /overlay
overlayfs:/overlay        1.1M    632.0K    456.0K  58% /
tmpfs                   512.0K         0    512.0K   0% /dev
/dev/sda1               945.2M     11.0M    869.4M   1% /mnt/usb
/dev/sda3               451.5M      2.3M    421.5M   1% /mnt/home

接着执行如下操作:

 代码如下 复制代码
mkdir /tmp/root
mount -o bind / /tmp/root
cp /tmp/root/* /mnt/usb -a
umount /tmp/root
rm -r /tmp/root

接着在opkg.conf配置中增加dest usb /mnt/usb,之后就可以将我们需要的OpenVPN安装到USB中了:

 代码如下 复制代码
vim /etc/opkg.conf
opkg update
opkg --dest usb install openvpn-openssl
ln -s /mnt/usb/usr/lib/libssl.so.1.0.0 /usr/lib/
ln -s /mnt/usb/usr/lib/libcrypto.so.1.0.0 /usr/lib/
ln -s /mnt/usb/usr/lib/liblzo2.so.2 /usr/lib/
ln -s /mnt/usb/usr/sbin/openvpn /usr/sbin/

到此已经可以运行OpenVPN了:

openvpn --version由于OpenVPN安装在USB中,所以后续启动OpenVPN会遇到找不到tun模块的状况,接下来配置tun模块:

 代码如下 复制代码
ln -s /mnt/usb/lib/modules/3.10.4/tun.ko /lib/modules/3.10.4/
ln -s /mnt/usb/etc/modules.d/30-tun /etc/modules
ln -s /mnt/usb/etc/modules.d/30-tun /etc/modules.d/
modinfo tun

接着我们关闭防火墙并看一下默认的一些转发和NAT规则:

 代码如下 复制代码
/etc/init.d/firewall stop
/etc/init.d/firewall disable
iptables -L -n --line-number
iptables -t nat -vnL POSTROUTING --line-number

可以看到此时默认是没有任何转发规则的,因此此时连接到路由器的设备是无法上网的,配置路由每次上电重启时候自动加载tun模块并加入转发规则:

vim /etc/rc.local修改如下配置:

 代码如下 复制代码
insmod tun
iptables -I FORWARD -o tun0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
iptables-save

 
exit 0
到此为止你的路由器已经可以再次正常接入互联网了,下面我们需要配置OpenVPN并进行流量的智能分发,即配置哪些流量走VPN。

首先我们先来配置OpenVPN,这包含两方面的配置,服务端和客户端。

服务端

 代码如下 复制代码
wget http://ipxcore.com/openvpn-debian-install.sh
chmod +x openvpn-debian-install.sh
./openvpn-debian-install.sh
 
iptables -I INPUT -p udp --dport 1194 -j ACCEPT
iptables -I INPUT -p tcp --dport 1194 -j ACCEPT
iptables -I INPUT -p udp --dport 443 -j ACCEPT
iptables -I INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -i tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -j ACCEPT
iptables -A FORWARD -o tun0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables-save

客户端

客户端需要配置在服务端生成的证书路径,首先从服务器下载打包的证书文件:

 代码如下 复制代码

scp root@100.100.100.100:/root/keys.tgz ./
tar -zxvf keys.tgz
vim 703n.ovpn
703n.ovpn

配置如下:

 代码如下 复制代码
client
remote 100.100.100.100 1194
dev tun
comp-lzo
ca /root/etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /root/etc/openvpn/easy-rsa/2.0/keys/client1.crt
key /root/etc/openvpn/easy-rsa/2.0/keys/client1.key
route-delay 2
route-method exe
max-routes 3888
redirect-gateway def1
verb 3

到此为止,通过当前的配置文件已经可以启动OpenVPN并实现所有流量经过VPN转发了:

openvpn --config ./703n.ovpn为了实现流量的智能分发,同时也是为了节省VPN的流量,可以通过ChnRoutes实现,在Mac上下载ChnRoutes并执行:

python chnroutes.py -p android会生成两个文件vpnup.sh和vpndown.sh,将这两个文件头部的alias删除,并下载到路由器中之后,在配置文件底部增加如下设置:

 代码如下 复制代码
script-security 2
up vpnup.sh
down vpndown.sh

好了,这时候再次启动OpenVPN,在Mac上分别traceroute下Baidu和Twitter就会发现,流量已经自动分发了。

时间: 2024-10-22 16:59:02

linux中打造智能路由功能详解的相关文章

linux中route命令的使用详解

route命令用于显示和操作IP路由表.要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现.在Linux系统中,设置路由通常是 为了解决以下问题:该Linux系统在一个局域网中,局域网中有一个网关,能够让机器访问Internet,那么就需要将这台机器的IP地址设置为 Linux机器的默认路由. 作用 route命令用于查看和配置linux内核路由表,也就是用来查看和配置linux的静态路由表. 描述 route命令操作基于linux内核路由表,它的主要

linux中 关于screen 的命令详解_Linux

一.背景 系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份.ftp 传输等等.通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为它们执行的时间太长了.必须等待它们执行完毕,在此期间不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了. 二.简介 GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件.用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换. GNU

linux中rpm与yum区别详解

yum与rpm区别 rpm是由红帽公司开发的软件包管理方式,使用rpm我们可以方便的进行软件的安装.查询.卸载.升级等工作.但是rpm软件包之间的依赖性问题往往会很繁琐,尤其是软件由多个rpm包组成时.Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载.安装.

Linux 中RPM命令参数使用详解

  此工具包最先是由Red Hat公司推出的,后来被其他Linux开发商所借用.由于它为Linux使用者省去了很多时间,所以被广泛应用于在Linux下安装.删除软件.下面就给大家介绍一下它的具体使用方法. 1.我们得到一个新软件,在安装之前,一般都要先查看一下这个软件包里有什么内容,假设这个文件是:Linux-1.4-6.i368.rpm,我们可以用这条命令查看: rpm -qpi Linux-1.4-6.i368.rpm 系统将会列出这个软件包的详细资料,包括含有多少个文件.各文件名称.文件大

linux中ln 命令使用参数详解

ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln –s 源文件 目标文件. 当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间.例如:ln –s /bin/less /usr/local/bin/less -s 是代号(symbolic)的意思.

Linux中rpm命令参数使用详解

rpm 执行安装包 二进制包(Binary)以及源代码包(Source)两种.二进制包可以直接安装在计算机中,而源代码包将会由RPM自动编译.安装.源代码包经常以src.rpm作为后缀名. 还不清楚具体有啥用,只知道可以检查一个软件是否安装.比如: rpm -qa |grep rsync -i, --install                     install package(s) -v, --verbose                     provide more detai

Linux中的Free命令用法详解

语法 free(选项) 1.命令格式: free [参数] 2.命令功能: free 命令显示系统使用和空闲的内存情况,包括物理内存.交互区内存(swap)和内核缓冲区内存.共享内存将被忽略 3.命令参数: -b 以Byte为单位显示内存使用情况. -k 以KB为单位显示内存使用情况. -m 以MB为单位显示内存使用情况. -g   以GB为单位显示内存使用情况. -o 不显示缓冲区调节列. -s<间隔秒数> 持续观察内存使用状况. -t 显示内存总和列. -V 显示版本信息. 上面是free

Linux中cron命令的用法详解

  linux中有一个命令可以定期来执行系统任务.这就是crond服务.下面介绍下crontab命令的用法. linux任务调度的工作主要分为以下两类: 编辑/etc/crontab 文件配置cron cron服务每分钟不仅要读一次 /var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此我们配置这个文件也能运用cron服务做一些事情.用 crontab配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务.此文件的文件格式是: 1.系统执行的工作:系

新版Word中的图表布局功能详解

新版Word已经放出有一段时间了,还有好多朋友不熟悉,今天三联网详解一二,希望能帮到您!在Word文档编辑过程中插入图片能够提升文档的品质,并且便于用户加深理解,而最新版本的Word则带来了更加强悍的图片和图表的编辑功能,主要带来了以下三点的重大改变: 1.布局选项按钮能够帮助你更加快捷的编辑你图表插入的位置,方式等整体布局. 2.Live布局能够让你实时的看到新布局的编辑效果. 3.对其参考线能够方便你将图片整齐的排列. 布局按钮: 首先第一步你需要在文档中插入图片,在图片的右边就会出现一个布