前言
现在就开始建立自己的Linux路由吧,我将会根据情况将这一过程划分成及部分进行说明,每个部分实现一个或多个主要功能,并给出一些个人建议,此教程并不适合所有人,但我希望能给大家启发。
视频说明
补上遗漏的防火墙固化部分:
功能说明
本教程将以Debian为基础,在ESXI提供的虚拟平台上实现一个带有翻墙功能的路由系统,由于自己是一个懒癌晚期患者,故暂时不会提供一键脚本来实现此功能。我希望通过我一步步的操作,让大家对整个Linux路由有比较完整的认识,本期将演示下述内容:
- 虚拟机建立,及配置说明;
- Debian安装注意点;
- 网卡配置,内外网划分;
- 开启转发,实现基础路由功能;
需要的工具
- 虚拟机(本例以ESXI为配置平台,如果有实体机并带有两个网卡的话也是可以的,此处不涉及到基于VLAN的单臂路由)
- Debian9.x光盘镜像(由于计划分配的内存较少,此处使用32位镜像)
- SSH工具(如果是Win10的话可能只需要一个CMD即可)
- 一个梯子
开始折腾
下载Debian镜像
虽然Debian10正式版已经发布了,考虑到源同步的问题,还是使用Debian9版本比较靠谱,并且考虑到分配的内存只有256M,我选用了32位系统镜像(相信今后大部分Linux发行版都将舍弃32位系统,不过现在对我的影响不大),当然如果你想用64位的系统也是可以的,内存稍微分配大点即可;由于在官网提供的是最新的版本,故我们要去别的地方下载。
Debian老版本下载网站请点击这里,一直向下滚就可以看到我们需要的Debian9.9。
点击我框出的位置,然后点击i386(此处表示32位系统),如下图所示:
选择iso-cd,安装是会自动下载一些安装包,如果网络不是很好的话也可以选择iso-dvd,dvd版本会集成大部分需要用到的组件;
随后即可点击你所需要的镜像了,我选择了netinst版本,即在安装的过程中会自动下载组件包的版本;
当然,如果你懒得自己去找下载地址,我也会提供相应的下载链接(方便大家一下吧!):
Debian9.9.0 下载链接
32 or 64 | 下载地址 |
---|---|
32 | bt-cd |
32 | bt-dvd1/bt-dvd2/bt-dvd3 |
32 | iso-cd |
32 | iso-dvd1/iso-dvd2/iso-dvd3 |
64 | bt-cd |
64 | bt-dvd1/bt-dvd2/bt-dvd3 |
64 | iso-cd |
64 | iso-dvd1/iso-dvd2/iso-dvd3 |
ESXI配置虚拟机
使用ESXI已经很多年了,相对而言配置更加得心应手,当然其他的虚拟化工具也是可以使用的,本次主要以ESXI为例,希望大家不要吐槽。
那就开始吧!
上传镜像
将下载好的镜像上传至ESXI的内部存储中,等会安装虚拟机需要用到的;
配置网络
家里原有的网络结构暂时不想改变,利用ESXI的虚拟网卡,这次我新建一个网络,在这个网络中进行调试,不影响我原有的网络结构;
网络结构及网段划分
ROS—-172.16.1.0/24—-Linux Router—-192.168.100.0/24—-Manjaro
家中的主路由是RouterOS,内网网段是172.16.1.0/24,计划将这台Linux Router的WAN口配置为172.16.1.50/24,LAN口配置为192.168.100.1/24,连接在LAN的设备所处网段是192.168.100.0/24,我将利用上次做演示的Manjaro做接入,到时候看看效果如何。
配置网络也很简单,进入 配置—-网络—点击右上角的添加网络向导 ,然后就可以添加新的网络了;
- 连接类型选择虚拟机
- 创建vSphere标准交换机(此处我并没有选择物理网卡,我直接使用内部通讯虚拟出一个网络交换机)
- 给新建的网络起个名字
- 直接点击完成,之后就可以看到网络中新出现的标准交换机
- 随后点击新的标准交换机的属性,进行编辑,在安全选项卡中启用混杂模式,此时会提示没有物理网卡,不用管,直接确定
至此新的网络的配置就完成了。
新建虚拟机
- 新建虚拟机,由于我使用的是6.0版本,ESXI上没有Debian9的虚拟机类型,那就选择Debian8吧,问题不大
- 选择两个处理器,内存就用原计划的256M吧
- 网卡选择两块,VM Network对应172.16.1.0/24网段,作为Linux Router的WAN口,Linux router对应192.168.100.0.24网段,作为LAN口,硬盘直接使用默认配置,16G足矣
- 以上结束之后记得勾选上完成前编辑虚拟机设置
- 在编辑界面需要修改两个位置,移除软盘,添加ISO镜像到虚拟光驱,并且勾选上打开电源是连接,如下图所示
至此虚拟机的前期配置就搞了,如果使用6.5或者6.7版本的ESXI,在网页上配置基本上也类似
安装虚拟机
在ESXI中安装虚拟机应该不难,Debian9的安装也很简单,大致上过去在Hyper-V上安装Ubuntu一样,为了节省时间,我就直接忽略这部分了(希望大家不要打我),只不过为了有效利用256M的内存,需要在组件选择的时候稍微调整一下,如下图所示:
需要取消掉桌面环境和打印服务组件,启用ssh服务,桌面的环境肯定会消耗不小的性能,而打印机我觉得作为二级路由暂时还用不到,用不到就不浪费空间来安装了,然后启用SSH的话就可以远程进行管理了
正式配置
1.安装Open-vm-tool组件
安装Open-vm-tool之后会比较方便的进行虚拟机开关机和重启,安装也很简单
首先需要点击控制台上的虚拟机选项——客户机—— 安装/升级VMware Tools,中间会跳出几个对话框,不用管,直接确定
之后在控制台中执行下述命令
1 | mount /dev/cdrom /mnt #挂载光驱至mnt目录下 |
此处即可看到安装组件的脚本
直接执行 ./vmware-install.pl
即可,此处会进入交互安装模式,除了第一个需要回答之外,其它的基本上一路回车即可,此处直接输入y并回车
安装完成之后就可以在ESXI的摘要界面上看到虚拟机此时使用的IP地址了,出现这个就说明安装成功并正常运行了
2.安装基础软件及配置环境
此处安装的软件并不是必须的,但可以提升Linux的操作便利性(只用命令行还谈什么便利性),我一般会执行这样的命令
apt-get install vim htop lrzsz git mlocate tmux -y
当然,由于使用了中文语言环境,在控制台上显示的中文都是方块,还是用SSH配置比较好
之后再调整一下快捷命令,执行如下命令 vi ~/.bashrc
,此处的 ~ 表示的是用户家目录,类似于Windows上Administrator目录,里面存放着用户的个人文件和配置, . 表示隐藏的文件
将上述的内容修改成如下所示
这些内容主要是让文件进行彩色显示,同时设置一些快捷命令,比如“ll”就相当于执行了“ls -l”,有兴趣的可以对比一下这些命令的差异,保存并退出之后,执行 source ~/.bashrc
即可应用上面的那些修改
3.修改SSH用密码登录
如果要使用SSH登陆的话需要修改一下SSH的配置文件,此处执行 vi /etc/ssh/sshd.config
,找到这个位置
修改成如下内容即可
之后执行 systemctl restart sshd
重启一下服务就可以应用修改了
4.配置网卡地址
按照原定的计划,虚拟机的两张网卡分别配置成WAN口和LAN口,此处执行 ip a
查看网卡名,ens192 将作为WAN口, ens224 作为LAN口
网卡的配置文件是“/etc/network/interface”,直接执行 vi /etc/network/interface
进行编辑,下面的是我的配置,除了IP,网关等信息外,我还使用 auto 替换了 allow-hotplug ,确保在系统启动时候无论网卡处在何种状态都启用网卡
直接执行 systemctl restart networking
,然后通过 ip a
查看网卡情况,配置的网卡信息就已经生效了
之后就可以通过SSH工具进行连接了,此处我选择了Xshell,使用个人和学生版即可,商业版是需要收费的
5.开启转发并配置iptables
Linux如果要成为一台路由器,必须先开启转发的功能
vi /etc/sysctl.conf
对 sysctl.conf 文件进行编辑,定位到如下位置
删除此行前面的 # 符号,然后保存,执行 sysctl -p
即可生效,并且重启也不会受到影响
接下来就是重头戏了,iptables命令,此处就不深入进行讲解了,如果大家有兴趣我会更新一下这方面的知识
1 | 重置iptables配置 |
配置完上述命令之后,路由功能基本上就实现了
6.实测
口说无凭,还是拿出点证据来吧!我这次就用上次演示的Manjaro虚拟机吧,修改网络连接,使用最新建立的那个网卡
同时修改一下虚拟机的网卡地址,此次我只是配置了路由,DHCP和DNS功能并没有配置,所以需要手动指定,将网络设置为192.168.100.10,和 ens224 网卡同一个网段,网关直接指向 ens224 的地址,DNS就是用最常用的114.114.114.114吧
先ping一下看看通不通
就用B站验证一下吧
右侧显示的是 ens224 的流量信息,看1080P的视频一点问题都没有(原谅我Manjaro的性能有点差,4K是跑不动了)
7.iptables规则固化
Debian的iptables不会开机启动,如果不进行一些操作的话,一重启一开始配置的iptables规则就会失效,路由功能就废了,为了解决这个问题,需要在开机的时候就加载iptables规则
执行cd /etc/network
打开network目录,此时在这个目录下有如下几个文件
每个文件对应的功能如下:
文件名 | 说明 |
---|---|
if-down.d | 网卡关闭时执行动作 |
if-post-down.d | 网卡关闭后执行动作 |
if-pre-up.d | 网卡启动前执行动作 |
if-up.d | 网卡启动时执行动作 |
interface | 网卡配置信息 |
interface.d | 网卡扩展配置 |
此处需要用到两个目录,if-pre-up.d 和 if-post-down.d ,我需要写两个脚本,分别在网卡开启前导入iptables规则和在网卡关闭后自动保存iptables规则,看似功能很“高级”,但实际上实现非常简单
在if-post-down.d目录中新建一个文件,vi /etc/network/if-post-down.d/iptables
,然后输入如下内容
1 | !/bin/bash |
同样的在if-pre-up.d目录中新建一个文件,vi /etc/network/if-pre-up.d/iptables
并输入如下内容
1 | !/bin/bash |
以上的操作即可在系统重启时自动保存iptables规则,并开机加载
更新历史
- 2019.07.21 下载镜像及配置虚拟机网络
- 2019.07.26 完成主体内容
- 2019.07.28 增加重启后加载iptables的方法
- 2019.07.29 修正部分错误
- 2019.08.11 嵌入视频说明
- 2019.09.10 格式调整