• Linux ip forward


    Linux 默认带有 ip forward 功能,只不过因为各种原因,默认的配置把该功能关闭了。本文通过 demo 来演示 Linux 的 ip forward 功能,具体场景为:开启 Linux 的 ip forward 功能,让 Linux 称为具有路由能力的主机,从而支持在两个局域网之间转发数据包。演示环境的网络结构如下图所示:

    本示例的演示环境为 Vmware Workstation,三台虚机的操作系统均为 Ubuntu 16.04。

    配置虚机 computer1 的网卡

    添加一个新的 network adapter(可以理解为虚机添加了一块网卡),并选择网络连接方式为 "Custom:Specific virtual network",笔者选择的虚拟交换机为 VMnet10:

    应用上面的配置后,通过 ip addr 命令查看,笔者的虚机中多出了一个名为 ens38 的网卡:

    下面我们来配置 ens38 的 IP 信息,打开并编辑 /etc/network/interfaces 文件,添加下面的内容:

    auto ens38
    iface ens38 inet static
    address 192.168.1.5
    netmask 255.255.255.0

    保存上面的文件,然后重启 networking 服务:

    $ sudo systemctl restart networking

    然后就可以看到 ens38 被分配了 IP 192.168.1.5:

    配置虚机 computer2 的网卡

    和虚机 computer1 相同,我们也为虚机 computer2 添加一块虚拟网卡,需要注意的是,请选择一个不同的虚拟交换机(笔者选择的是 VMnet11):

    笔者系统中新的网卡名称也是 ens38,以同样的方式设置该网卡的 IP 为 192.168.2.5,具体过程不再赘述:

    配置 linux router 的网卡

    为虚拟机 linux router 添加网卡,连接到虚拟交换机 VMnet10:

    通过 ip addr 命令查看,发现新增了网卡 ens38,配置该网卡的 IP 地址为 192.168.1.254。注意,该网卡的 IP 与 computer1 的 IP 在同一个网段中(192.168.1.0/24)。
    接着为 linux router 添加另一块网卡并连接到虚拟交换机 VMnet11:

    通过 ip addr 命令查看,发现新增了网卡 ens39,配置该网卡的 IP 地址为 192.168.2.254。注意,该网卡的 IP 与 computer2 的 IP 在同一个网段中(192.168.2.0/24)。也就是说 linux router 主机有一块网卡连接网络 192.168.1.0/24,另一块网卡连接网络 192.168.2.0/24:

    在 /etc/network/interfaces 文件中添加的内容如下:

    auto ens38
    iface ens38 inet static
    address 192.168.1.254
    netmask 255.255.255.0
    
    auto ens39
    iface ens39 inet static
    address 192.168.2.254
    netmask 255.255.255.0

    此时从 computer1 ping 192.168.1.254 是连通的:

    从 computer2 ping 192.168.2.254 也是连通的:

    但是 computer1 与 computer2 不能相互连通。

    配置 linux router 的 ip forward

    ip forward 属于 linux 内核的功能,我们可以通过修改内核的参数来启用或禁用该功能。先通过下面的命令查看 ip forward 功能是否启用:

    $ cat /proc/sys/net/ipv4/ip_forward

    如果返回值为 1,说明该功能已经启用,否则就是没有启用。Ubuntu 系统默认没有启用该功能,所以我们需要通过修改配置来启用它。
    其实非常简单,编辑文件 /etc/sysctl.conf,去掉 net.ipv4.ip_forward=1 前面的注释:

    修改 /etc/sysctl.conf 文件后需要执行指令 sudo sysctl -p 后新的配置就会生效。通过这种方式修改后的配置会一直生效,包括重启系统。如果想临时测试一下 ip forward 功能,可以通过下面的命令临时修改一下配置:

    $ sudo sysctl -w net.ipv4.ip_forward=1

    这样在系统重启后,配置就恢复为默认值了。

    配置 linux router 的 iptables 规则

    除了 ip forward,还需要为 linux router 主机添加适当的 iptables 规则:

    $ sudo iptables -A FORWARD -i ens38 -o ens39 -m state --state RELATED,ESTABLISHED -j ACCEPT
    $ sudo iptables -A FORWARD -i ens39 -o ens38 -j ACCEPT

    添加这两条 iptables 规则后,iptables 就能够按照相应的规则的在我们设置的网卡之间(ens38 和 ens39)转发数据包了。

    为 computer1 和 computer2 添加路由规则

    最后,我们需要为 computer1 和 computer2 添加合适的路由信息。
    computer1 上的默认路由信息是不能把数据包路由到网络 192.168.2.0/24 的。我们需要手动添加对应的路由信息:

    $ sudo ip route add 192.168.2.0/24 via 192.168.1.254 dev ens38

    这样就完成了所有的配置。

    检查结果

    让我们从 computer1(192.168.1.5) ping computer2(192.168.2.5) 试试:

    $ ping -c 3 192.168.2.5

    从 computer1 可以成功 ping 到 computer2,说明我们配置的 linux ip forward 已经开始工作了!

    参考:
    How to Turn a Linux Server into a Router to Handle Traffic Statically and Dynamically – Part 10

  • 相关阅读:
    spring @resource @ Autowired
    mysql 。。。
    MYSQL
    oracle sql 性能 优化
    tomcat 解析(五)-Tomcat的核心组成和启动过程
    tomcat 解析(四)-处理http请求过程
    tomcat 解析(三)-启动框架
    tomcat 解析(二)-消息处理过程
    tomcat 解析(一)-文件解析
    我发起并创立了一个 C 语言编译器 开源项目 InnerC
  • 原文地址:https://www.cnblogs.com/sparkdev/p/9262825.html
Copyright © 2020-2023  润新知