精品转载:通过Ubuntu台式机实现软路由功能
原文链接 - https://blog.csdn.net/u012174021/article/details/45369457
如果你有一台拥有两块网卡的电脑的话,那么你可以通过一些简单的配置将这台电脑变成一个具有强大潜能的路由器。你可以在这个路由器上建立简单的NAT(Network Address Translation)功能,转发数据或者实现代理服务等等许多其他的功能。这里将介绍通过一些简单的配置步骤将一个Ubuntu系统的PC机变成一台路由器。
前提准备
1、一台Ubuntu系统的PC机(笔记本,台式机均可)
2、两个网卡(我用了一USB转RJ45网线接口+笔记本内置网卡)
3、网络连接(做这些当然还是为了能够通过电脑上网)
4、iptables的一些知识
搭建说明
再次说明,我们需要电脑装有两块网卡:
- 其中一块网卡连接在Internet上,我这里连接Internet的网卡是eth0;
- 另外一块网卡连接即将搭建的内网,我这里连接内网的网卡是eth1.
- 希望呈现的效果是:
Internet <==> router <==> HostA eth0 (外网IP) <==> HostA SoftRouter <==> HostA eth1 (网关Ubuntu Gateway) <==> switch <==> HostB eth0 (内网IP)
下图是整个系统搭建的框架:
从左到右的一些说明:
- router:Host A通过这个路由器与Internet相连
- eth0:连接到Internet的网络适配器
- Host A:Ubuntu系统的PC机
- eth1:连接到内网的网络适配器
- switch:因为不希望直接用网线连接Host A和Host B,中间通过这个交换机连接
- eth0:Host B的连接到网络的网络适配器(Host B只需要一块网卡就可以了)
配置步骤
配置各个网口的IP
首先是给各个网络端口配置静态IP,因为我们这里并没有运行dhcpd,所以所有的网络端口都需要手动配置一个静态IP,对于端口IP的配置,既可以通过命令行配置,也可以通过修改网络配置文件来配置,还可以通过桌面版本的网络设置里进行配置。通过命令行配置的话,下次再重新启动电脑或者重启网络服务之后配置也就随之失效了,而且在我的测试里,过了一段时间之后,网络又恢复了默认配置。接下来具体介绍下通过修改配置文件和桌面版本的网络设置里配置的方法。
1、针对Host A的两块网卡所配置的静态IP:
系统设置(System Settings)=>网络(Network)=>选择网络端口=>选项(Options)
我这里给eth1配置的IP为192.168.6.1
对于eth0,执行同样的操作就可以了,从上面的系统结构图可以看到我们的eth0通过一个路由器router连接到Internet,这个路由器的网段为192.168.1.1/24,所以我这里给eth0配置的IP地址为192.168.1.155
2、针对Host B的eth0同样需要配置静态IP:
- 通过ifconfig命令配置ip和mask
ifconfig eth0 192.168.1.11 netmask 255.255.255.0
- route命令配置网关
route add default gw 192.168.1.1
这里的默认网关和DNS服务器是需要写上的,同时为了网速的考虑,这里的DNS服务器最好和前面的路由器上的保持一致,这个可以通过任意一台通过该路由器接入Internet的设备上查询,这里就不赘述了。
1、打开一个终端(Ctrl+Alt+t)
2、更改相应的配置文件:
sudo vim /etc/network/interfaces
3、修改这个配置文件如下:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.1.155
netmask 255.255.255.0
gateway 192.168.1.1
auto eth1
iface eth1 inet static
address 192.168.6.1
netmask 255.255.255.0
gateway 192.168.6.1
注意上面的修改操作需要有root权限才能保存,同时修改完之后需要重启网络服务(或者直接重启电脑),上面的设置就会生效了。
4、重启网络服务:
sudo /etc/init.d/networking restart
Tips:
注意这里你可能不能通过interfaces这个文件来修改配置网络,这个可能和你安装了network-manager有关,删除这个之后就可以通过更改interfaces来配置网络了.
对于Host B,如果你也是ubuntu系统并且想通过配置文件来配置网络的话,可以按照上面的步骤来,但是对于DNS服务器的配置在/etc/resolv.conf:
nameserver 210.45.240.99 #这里是我的DNS服务器地址,你可以配置成你能够访问的,比如说8.8.8.8
配置Ubuntu HostA数据包转发功能
上面两部分介绍了配置静态IP地址的过程,接下来需要让你的PC机能够转发IP数据包,Linux系统本身就有IP数据包转发的功能,但是默认情况下是关闭的,你需要通过修改配置文件来启动这个功能。
1、修改/etc/sysctl.conf文件,将net.ipv4.ip_forward=1前面的注释去掉:
2、再使用下面的命令来使上面的修改生效(当然你也可以重启电脑):
sudo sysctl -p
上网看很多教程在这里还加了一步:
sudo echo 1 > /proc/sys/net/ipv4/ip_forward
在你修改sysctl.conf并使之生效后会发现ip_forward这个文件中的0自动变成了1,不需要再通过这一步来改变。同时如果你没有更改sysctl.conf的话,那么你也没办法用这个命令来修改ip_forward里的内容,你会发现怎么改ip_forward里的内容都是0。
配置路由表
搞定IP数据包转发的问题,接下来就是添加路由表让eth1和eth0能够通信了,这个通过iptables来搞定。
在终端中输入以下命令:
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
注意这里是针对我的情况来写的,你要注意eth0和eth1所连接的内网和外网的关系!关于这些命令的意思,可以参见iptables的一些说明。
接下来保存这些规则:
iptables-save > /etc/iptables.rules
到这里差不多也就完成了,接下来就是连接Host A和Host B测试一下了。
测试
将Host A和Host B用网线连接起来,Host B的配置上面已经讲过,下面是我在Host B上打开百度网页的测试:
可以看到Host B通过Host A成功的接入了Internet。