在Linux上搭建小路由器

实验环境:centos7,一台作为服务器,一台模拟客户端。

  • 服务器:两张网卡,一张为可以连接外网,一张作为内网卡,仅主机模式。
  • 客户端:一张仅主机模式的网卡

在Linux上搭建小路由器_linux


一、配置网卡

  1. 服务器;

我们可以先查看一下我们的网卡设备,可以看到由ens33和ens34,ens33是可以访问外网的,ens34是作为我们的内网卡。

[root@chensy ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:1c:e9:21 brd ff:ff:ff:ff:ff:ff
    inet 192.168.8.132/24 brd 192.168.8.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::ca78:488d:a413:9921/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:1c:e9:2b brd ff:ff:ff:ff:ff:ff
    inet 1.1.1.2/24 brd 1.1.1.255 scope global noprefixroute ens34
       valid_lft forever preferred_lft forever
    inet6 fe80::5ce5:492f:648:ed9e/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
  • 配置ens33
[root@chensy ~]#  vim /etc/sysconfig/network-scripts/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="6b4ddca2-03a8-4ea1-9928-d7544c87d13b"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.8.132" #根据自身网段设置
PREFIX="24"
GATEWAY="192.168.8.2"
IPV6_PRIVACY="no"
  • 配置ens34
[root@chensy ~]#  vim /etc/sysconfig/network-scripts/ifcfg-ens34

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static #静态IP
DEFROUTE=no #不设置为默认路由
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens34
UUID=21599ec9-ddb1-4781-9f3e-b31edaec5311
DEVICE=ens34
ONBOOT=yes #启动时激活网卡
IPADDR=1.1.1.2 #可自定义
PREFIX=24
GATEWAY=192.168.8.0 #和ens33的网关一样
IPV6_PRIVACY=no
~
~

2.配置客户端

在Linux上搭建小路由器_linux_02

PS:
记得配置DNS,网关设置的是服务器的ens34的IP地址。

配置完网卡需要重启网络:

[root@chensy ~]# systemctl restart network

二、这时候客户机ping服务器可以ping通,但是ping外网是不可以的。

在Linux上搭建小路由器_linux_03

  • 我们先在服务器上看看我们的路由表
[root@chensy ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.8.2     0.0.0.0         UG    100    0        0 ens33
1.1.1.0         0.0.0.0         255.255.255.0   U     101    0        0 ens34
192.168.8.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33

可以看出,1.1.1.0子网的数据在内网ens34发送;192.168.8.0的数据也在子网内发送;其它数据全部是经过192.168.8.2这个网关口的。

  • 假如我们的1.1.1.5这个客户端想访问一个外网,如baidu,而这时,只有192.168.8.0这个网段内的主机才可以访问外网,这里涉及到一个Public IP公网IP以及masquerade地址伪装的知识点(自行查阅资料)。

我们直接下一步。

三、防火墙开启masquerade功能

[root@chensy ~]# firewall-cmd --add-masquerade --permanent #--add- 新增子选项 masquerade伪装(可自动判断用户要去的网络,查询路由后,将用户的源地址转换为可去往该网络的IP)--permanent永远的
Warning: ALREADY_ENABLED: masquerade
success
[root@chensy ~]# firewall-cmd --reload #重启防火墙
success
[root@chensy ~]# firewall-cmd --list-all #查看防火墙所有列表信息
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33 ens34
  sources:
  services: dhcpv6-client ssh
  ports:
  protocols:
  masquerade: yes #这里yes代表开启
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

四、配置Linux的内核参数(让Linux系统具有路由转发功能)

#原理可以查阅路由器的功能。

[root@chensy ~]# vim /etc/sysctl.conf

# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward=1 #内核参数net.ipv4.ip_forward,指定了Linux系统当前对路由转发功能的支持情况;为0时表示禁止进行IP转发;是1时,则说明IP转发功能已经打开。
  • 让刚刚修改的配置生效
[root@chensy ~]# sysctl -p #一种Linux用户态与内核态通信方式,它可以在内核运行过程中,动态修改内核参数。
net.ipv4.ip_forward = 1
[root@chensy ~]#

五、这时候,我们再使用客户机ping外网(www.baidu.com)

在Linux上搭建小路由器_linux_04


到这里,我们的客户机可以成功访问外网,也就说明,我们的小路由器的环境搭好了♥