背景:
公司公用wifi速度不稳定,固想使用主机做网关做一个专网的弱网测试环境。 如何做弱网测试?
整体结构图
准备?作 主机 - ubuntu 64 位系统, 内核版本?于 2.6(建议使?最?安装) 双?卡 - 除原有板载?卡外, 额外需要?块 pci-e ?卡. (参考 intel 82574L) 路由器 - ?持桥接模式 系统模块和软件 - 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 对下?流量进?整形,参考如下
HTB:https://man7.org/linux/man-pages/man8/tc-htb.8.html NETEM:https://man7.org/linux/man-pages/man8/tc-netem.8.html
|