Linux 弱⽹主机搭建⽅法

作者: 啊哈_0042 | 来源:发表于2021-07-12 16:47 被阅读0次

    背景:

    公司公用wifi速度不稳定,固想使用主机做网关做一个专网的弱网测试环境。
    如何做弱网测试?

    整体结构图

    准备⼯作

    1. 主机 - ubuntu 64 位系统, 内核版本⾼于 2.6(建议使⽤最⼩安装)
    2. 双⽹卡 - 除原有板载⽹卡外, 额外需要⼀块 pci-e ⽹卡. (参考 intel 82574L)
    3. 路由器 - ⽀持桥接模式
    4. 系统模块和软件 - iproute2, iptables, sch_netem, dhcpd(参考 https://help.ubuntu.com/community/isc-dhcp-server

    部署⽅法

    硬件连接⽅法

    1. enp2s0 有线连接上级路由器, 通过 dhcp 获取 ip 地址。
    2. enp5s0 有线连接下级路由器 WAN ⼝, 路由器设置为桥接模式。

    打开 IP forward 功能

    $ sudo vi /etc/sysctl.conf
     # 改 ip_forward=1
     net.ipv4.ip_forward=1 
     # 使⽣效
     $ sudo sysctl -p
    

    设置 iptables 进⾏ NAT 转发

     # 安装 iptables-persistent 包
     $ sudo apt install iptables-persistent
     
     # 设置 iptables NAT 转发
     $ sudo iptables -F
     $ sudo iptables -P INPUT ACCEPT
     $ sudo iptables -P FORWARD ACCEPT
     $ sudo iptables -t nat -A POSTROUTING -o enp2s0 -j MASQUERADE
     
     # 保存iptables的设置
     $ sudo iptables-save | sudo tee /etc/iptables/rules.v4
    

    启⽤ ifb 模块

    # 在⽂件的最后⼀⾏添加:ifb
     $ sudo vim /etc/modules
    

    设置⽹卡 IP 地址

    Ubuntu 17.10 -

    $ sudo vim /etc/network/interfaces
     auto lo
     iface lo inet loopback
     
     auto enp5s0
     iface enp5s0 inet static
     address 192.168.5.1
     netmask 255.255.255.0
     broadcast 192.168.5.255
     gateway 192.168.5.2
    

    Ubuntu 17.10 +

     $ sudo vim /etc/netplan/01-network-manager-all.yaml
     
     # Let NetworkManager manage all devices on this system
     network:
         version: 2
         renderer: NetworkManager
         ethernets:
             enp5s0: ## Lan ⽹卡名
                 dhcp4: no
                 addresses:
                     - 192.168.5.1/24 ## 静态 IP
                 gateway4: 192.168.5.1
                 nameservers:
                 addresses: [114.114.114.114, 223.5.5.5]
     
     $ sudo netplan apply
    

    安装和设置 DHCP 服务

    推荐⽅案 dnsmasq

    # 安装 dnsmasq
     sudo apt install dnsmasq
     sudo vim /etc/dnsmasq.conf
     
     # 关键配置如下
     # dhcp ⽹卡的 ip
     dhcp-option=option:router,192.168.5.1
     # dns 服务地址
     dhcp-option=option:dns-server,192.168.5.1
     # 分配 ip 范围 ⼦⽹掩码 租期
     dhcp-range=192.168.5.100,192.168.5.240,12h
     # dns服务端⼝
     port=53
     
     # 开启服务并设置开机启动
     sudo systemctl enable dnsmasq
     sudo systemctl start dnsmasq
     
     # 如果提示 53 端⼝冲突
     sudo vi /etc/systemd/resolved.conf
     DNSStubListener=no
     sudo systemctl restart systemd-resolved
    

    备选⽅案 isc-dhcp-server

    # 安装相关的软件包
     $ sudo apt install dhcpd
     $ sudo apt install isc-dhcp-server
     # 编辑⽂件,配置udhcpd服务
     $ sudo vim /etc/dhcp/dhcpd.conf
     # 添加如下
     subnet 192.168.5.0 netmask 255.255.255.0 {
         range 192.168.5.100 192.168.5.199;
         option routers 192.168.5.1;
         option domain-name-servers 114.114.114.114;
     }
     $ sudo vim /etc/default/isc-dhcp-server
     # 修改如下
     INTERFACESv4="enp5s0"
     
     # 启动DHCP服务
     $ systemctl enable isc-dhcp-server
    

    启⽤ ifb ⽹卡(可考虑作为开机启动项)

     sudo modprobe ifb
     sudo ip link add ifb0 type ifb
     sudo ip link set ifb0 up
     
     sudo tc qdisc add dev enp5s0 ingress
     sudo tc filter add dev enp5s0 parent ffff: protocol ip u32 match u32 0 0
     flowid 1a37: action mirred egress redirect dev ifb0
    

    使⽤⽅法

    接下来可以通过 ifb0 对上⾏流量进⾏整形,通过 enp5s0 对下⾏流量进⾏整形,参考如下

    1. HTB:https://man7.org/linux/man-pages/man8/tc-htb.8.html
    2. NETEM:https://man7.org/linux/man-pages/man8/tc-netem.8.html

    相关文章

      网友评论

        本文标题:Linux 弱⽹主机搭建⽅法

        本文链接:https://www.haomeiwen.com/subject/ljjspltx.html