Linux 弱⽹主机搭建⽅法

背景:

公司公用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 弱⽹主机搭建⽅法)