公司使用的办公网是交换机连接了三个AP组成的,使用一个C类网段,随着人越来越多,设备也越来越多,一个C类网段的IP不够用了,经常会出现有人连接上WIFI但是因为IP池耗尽,DHCP无法分配IP,导致设备无法访问网络的情况。因为其他一些原因,也没法多分一个网段给办公网。我们申请购买一台企业级路由器,由路由器分一个子网出来,再连接AP,上报后回复是机房有几台闲置服务器,部署一个软路由吧。于是任务落在了还是个小萌新的我身上。
一开始想选择OpenWrt系统,我们组长提供了ROS系统的镜像,于是转而使用这个,但是这个系统对于只玩过一次海蜘蛛的小白(比如我)来说确实比较复杂,折腾了一个多星期,踩坑碰壁无数,终于搞定。
部署过程中怎么找都没找到一个无坑完整的ROS部署教程,都是这个抄那个,那个抄另一个,还有很多抄漏的错误,决定自己写一份教程,作为自己一个多星期心血的记录,也希望能帮到后面的人。
实际部署时不方便截图等操作,所以现在开个虚拟机来模拟一下。
虚拟机软件:VMware 15.5
ROS版本:5.24 ISO版
测试机:ROS-test -A:192.168.20.x (DHCP)
ROS-test -B:192.168.20.x (DHCP)
winbox:winboxx64
网络配置:
使用VMnet8和VMnet9两张虚拟网卡分别模拟软路由的WAN口网卡和LAN口网卡。
VMnet8使用NAT模式(桥接也可以,注意网卡的子网IP)连接物理主机外网,软路由WAN口连接VMnet8网卡,WAN口IP设置为:192.168.10.254。
VMnet9使用“仅主机模式”,两台Linux测试机连接VMnet9虚拟网卡,模拟实际中连接软路由LAN口的设备,ifcfg-ens33配置文件中设置好BOOTPROTO=DHCP等参数,软路由LAN口连接VMnet9网卡,LAN口IP设置为:192.168.20.254。
VMnet8一般自带的有,再新增一个VMnet9虚拟网卡就可以了,然后设置好子网掩码等即可。注意取消勾选“使用本地DHCP服务将IP地址分配给虚拟机”,我们的WAN口会配置静态IP,软路由设置好后也会自动使用自己的DHCP功能给连接LAN口的设备分配IP。
一共需要三台虚拟机,一台ROS,两台Linux。按上面的网络环境配置配好对应的网卡。
(1)ROS,需要额外添加一张网卡:
(2)CentOS-7.2 -A:
(3)CentOS-7.2 -B:
好了,现在进入正片。
(1) 选择“新建自定义(高级)虚拟机”
(2)选择“稍后安装操作系统”
(3)选择虚拟机系统版本
(4)设置虚拟机名称及路径
(5)1C1G配置足够了,网络选择“NAT模式”
(6)SCSI控制器选它推荐的,注意虚拟磁盘类型选择IDE,不然ROS不支持。
(7)后续按正常虚拟机配置就可以了。
(8)添加ROS虚拟机的网卡
① 单击“编辑虚拟机设置”
② 添加配置网络适配器
③ 选择系统镜像
④ 开机,开始安装系统
开机后会让你选择安装什么组件,在不清楚每个都是干什么的之前,建议“A”全选后“I”安装。
然后会问你“y/n”,都选“y”就行了。
安装完毕后按回车重启系统,重启好了后就安装成功了。
⑤ Linux测试机的虚拟机安装就不写了,毕竟只是虚拟机模拟实际操作,而且大家应该也都会,不会的网上也大把教程。
① 实际操作中需要把软路由和自己的电脑接在同一个网络里,直接网线直连更好,然后用winbox连接。
② 单击winbox的搜索按钮,它会自动搜索局域网中的ROS主机,然后我们选择MAC地址连接,因为还没有配置IP,选IP是连不上的。
如果两个MAC地址都连不上(比如我写这篇教程的时候,我也是新手小白,不知道为啥连不上,有大佬愿意指教的话请评论区指点一下,谢谢),我们可以先直连ROS用命令行配置IP,然后用IP连接。
③ 命令行配置ROS网卡IP地址并连接。
ROS默认用户名admin,无密码。
ROS的命令并不复杂,使用三条命令就可以给网卡配置好IP(具体如图):
interface pri # 显示所有网卡接口名称,pri是print的缩写
ip address pri # 显示当前IP,未配置前是空的,配好后再执行一次看看是否成功
ip address add address=xxx.xxx.xxx.xxx/xx interface=xxxxx
#给某个网卡配置IP,address=你要配的IP/子网掩码,interface=你选中的网卡的名字
我们现在可以使用winbox连接ROS了。
连接后会提示你激活,不激活就只能用24小时之后失效的测试版,我演示教程就不再激活了,大家要支持正版(狗头)。
单击“interface”,我因为是虚拟机,我用在VMware中移除某个网卡的方式确定了WAN口和LAN口,物理机实际操作中根据连接的网口来判断就行了,为了清晰,我分别给网卡设置了名字,只需要改名字,其他的都不动。
单击“IP-Address-加号-输入目标网卡IP及子网掩码”,Network系统会自己填写,不用管它。
单击“IP-Routes-加号-输入WAN口网关”,网上好多教程写的是选择LAN网卡就行了,我这样选了之后连不上外网,换成WAN口网关才连上外网,也许是环境不一样吧,后面再研究了,先输入WAN口网关这样用着。
“IP-Pool-加号-输入IP范围”,这个地址池是给LAN口分配IP用的,注意网段和你的LAN口一样,比如我的LAN口IP是“192.168.20.254”,我输入的IP范围是“192.168.20.10-192.168.20.230”,地址池名字随便写,然后点OK就行了。
“IP-DHCP Server-加号-选择端口、租期、地址池”。
③ 添加NETWORK网络参数
“IP-DHCP Server-加号-输入对应参数”
Address代表LAN口是哪个网段,子网掩码是什么,在这里我们必须要跟LAN口地址设置到一个网段内,即"192.168.20.0/24"。
Gateway代表内网的网关,把内网地址直接作为内网的网关,即"192.168.20.254"。Netmask是内网IP地址的子网掩码,输入"24"。DNS Servers代表用来做域名解析的服务器地址,我设置为:223.5.5.5和114.114.114.114。
备份原始网卡配置文件,然后将测试机的网卡配置改成DHCP:
cd /etc/sysconfig/network-scripts
cp ifcfg-ens33 ifcfg-ens33.bak #ens33是我的网卡名,不一定一样
vi ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=b48bd1cf-0816-4c17-9164-02ef7f678cea
DEVICE=ens33
ONBOOT=yes
然后重启网卡,再查看一下IP地址:
systemctl restart network
ip addr
在“IP-Firewall”中,单击“NAT”标签页,加号新建Rule,设置General标签页中的Chain为“srcnat”,Action中Action为masquerade。
ROS一般用脚本限速,假设希望限制“192.168.20.11-192.168.20.230”IP段的所有IP,上行最高512Kbps,下行最高512Kbps,则脚本为:
:for xiansu from 11 to 230 do=
{
/queue simple add name=("限速-192.168.20." . $xiansu . "")
target-address=("192.168.20." . $xiansu . "/32")
limit-at=0/0 max-limit=512000/512000 }
# 为了方便看,我用回车分了行,实际执行时不需要分行。
使用测试机ping一下DNS,若能通,则ROS系统配置成功,若不通,则需要对照上面步骤排查。
首先查看一下自己系统的yum源,把yum源改成国内的,规避国外源速度的影响,我这里用的华为源,windows系统可直接测速。具体怎么改我就不再写了,百度大把大把教程。
测速方法很多,我使用speedtest的测速脚本:
1. pip(不知道为什么,我用wget直接安装,给权限后用不了,只能用pip):
#没有pip的下面代码块有命令自己装一下
wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate
python get-pip.py
pip install speedtest-cli
which speedtest-cli #查找测速脚本所在位置,一般是/usr/bin下
cd /usr/bin
./speedtest-cli --list | grep China #查看国内所有节点
./speedtest-cli --server=xxxx --share
# xxxx是节点序号,share是将结果生成html页面
2. wget:
wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
chmod +x speedtest-cli #赋予脚本执行权限
./speedtest-cli --server=xxxx --share
安装pip:
yum -y install epel-release
yum -y install python-pip
我现在写这篇CSDN的网络环境很差(宽带坏了,开的4G热点),测出来的数据有问题,但是能看出来限速成功了(和上下行无限制相比):
截止现在ROS算是能够正常工作了,不过现在还很脆弱,防火墙啥的还没设置,默认端口啥的也没改,后面再补吧。
我还是一个软路由小白,教程里肯定有不少在大佬眼里很幼稚的地方,请大佬们有时间的话一定帮我指出来,万分感谢。
最后,如果感觉写的还凑合的话,求一个赞,来自陌生人的每个赞都能让我开心好久~