You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在虚拟机中配置Ubuntu Linux 16.04作为路由器?

我来帮你搞定这个Ubuntu虚拟机路由器的配置卡点——毕竟要跑atcd做定向网络测试,路由转发可是核心环节!下面是一步步的解决方案,针对你卡在网关路由数据包的问题:

1. 先确认网卡配置与静态IP设置

首先得把两块网卡的角色分清楚:假设一块网卡(比如eth0)用来连接主机所在的局域网(相当于路由器的WAN口),另一块(eth1)用来连接测试设备(相当于LAN口)。

先通过ip addr命令确认两块网卡的名称,然后编辑网络配置文件/etc/network/interfaces,设置静态IP:

auto eth0
iface eth0 inet static
    address 192.168.1.10  # 和主机同网段的IP,根据你的实际情况调整
    netmask 255.255.255.0
    gateway 192.168.1.1   # 主机的网关地址
    dns-nameservers 8.8.8.8  # 公共DNS,方便访问外网

auto eth1
iface eth1 inet static
    address 10.0.0.1  # 给LAN口分配一个独立网段的IP,比如10.0.0.1/24
    netmask 255.255.255.0

保存后重启网络服务:

sudo systemctl restart networking
2. 开启IP转发(这是路由的关键!)

Ubuntu默认是关闭IP转发的,这也是很多人卡在路由环节的原因。

  • 临时生效(重启虚拟机后失效):
sudo sysctl -w net.ipv4.ip_forward=1
  • 永久生效(重启后依然有效):
    编辑/etc/sysctl.conf,找到net.ipv4.ip_forward=1这一行,去掉前面的#注释,然后执行:
sudo sysctl -p

可以用sysctl net.ipv4.ip_forward命令验证,输出为1就是开启成功。

3. 配置NAT规则,让测试设备能访问外网

如果你的测试设备需要通过路由器访问外网,得设置SNAT(源地址转换)规则:

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

为了让这个规则在虚拟机重启后保留,安装iptables-persistent工具:

sudo apt-get install iptables-persistent

安装过程中会提示保存当前的iptables规则,直接选Yes就行。

4. 配置atcd的定向路由策略

atcd需要通过NFQUEUE来拦截和处理数据包,所以得把测试设备的流量导向atcd的处理队列:
首先确保atcd已经安装并运行:

sudo apt-get install atcd
sudo systemctl start atcd
sudo systemctl enable atcd  # 设置开机自启

然后添加iptables规则,把测试设备的流量转发到NFQUEUE(队列号设为0,和atcd默认监听的队列一致):

sudo iptables -A FORWARD -s 10.0.0.2  # 替换成你的测试设备IP
              -j NFQUEUE --queue-num 0

之后你就可以用atc命令设置各种网络条件了,比如给测试设备添加100ms延迟+10%丢包:

sudo atc --add --delay 100ms --loss 10% --src 10.0.0.2 --dst 0.0.0.0/0
5. 验证路由与atcd效果
  • 在测试设备上,把网关设置为10.0.0.1,IP设为10.0.0.2/24(和路由器LAN口同网段)
  • 先测试基础连通性:ping 10.0.0.1(能通说明LAN口没问题),再ping 8.8.8.8(能通说明NAT和IP转发正常)
  • 测试atcd效果:设置完延迟/丢包后,再ping外网,观察是否有对应的网络变化。
常见问题排查
  • 如果测试设备ping不通路由器:检查eth1的IP配置是否正确,或者添加ICMP允许规则:sudo iptables -A INPUT -i eth1 -p icmp -j ACCEPT
  • 如果ping不通外网:确认net.ipv4.ip_forward是1,检查NAT规则是否正确,同时确保主机的桥接网卡没有限制虚拟机的对外访问
  • 如果atcd不生效:检查iptables的NFQUEUE规则是否正确,或者看atcd服务状态:sudo systemctl status atcd

内容的提问来源于stack exchange,提问作者scorpiodawg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:28:46