(迁移自https://serverfault.com/questions/895250/setting-up-ubuntu-linux-16-04-as-a-router-within-a-vm)
我想将 Ubuntu VM 设置成运行诊断这样我就可以在各种网络条件下对单个设备进行有针对性的测试。我已经让部分设备正常工作,但无法让网关路由我的数据包。
我尝试过的要点:
"router"
在 Ubuntu 16.04 主机上创建 Ubuntu 16.04 VM( )("laptop"
)- 为虚拟机创建了两个网卡,均桥接至主机的单个 WiFi 适配器
- 将第一个 NIC(
enp0s3
)静态配置为网关,地址为 192.168.0.199 - 将第二个 NIC(
enp0s8
)设置为通过 DHCP 自动配置,例如 192.168.0.100 - 使用以下
iptables
规则(来自这里和这里) 在router
:iptables -t nat -A POSTROUTING -o enp0s8 -j MASQUERADE iptables -A FORWARD -i enp0s8 -o enp0s3 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i enp0s3 -o enp0s8 -j ACCEPT
- 被测设备/主机(
"test-device"
)配置为静态 IP 192.168.0.77,配置为使用 192.168.0.199 作为网关。
此时,我能够router
从 LAN 上配置为仍使用 Wifi 路由器作为网关(192.168.0.1)的其他机器访问通过 192.168.0.199 和 192.168.0.100 运行的 HTTP 服务器。
test-device
能够 ping 通 Internet 上的主机,但是,无法与这些主机建立 TCP 连接(例如,curl www.google.com
失败并显示“目标不可达”)。
其他一些值得分享的事情:
iptables
配置router
:
root# iptables -L -v
Chain INPUT (policy ACCEPT 12012 packets, 5058K bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- enp0s8 enp0s3 anywhere anywhere state RELATED,ESTABLISHED
0 0 ACCEPT all -- enp0s3 enp0s8 anywhere anywhere
Chain OUTPUT (policy ACCEPT 3220 packets, 271K bytes)
pkts bytes target prot opt in out source destination
ip route
条目
root# ip route
default via 192.168.0.1 dev enp0s3 onlink
169.254.0.0/16 dev enp0s3 scope link metric 1000
192.168.0.0/24 dev enp0s3 proto kernel scope link src 192.168.0.199
192.168.0.0/24 dev enp0s8 proto kernel scope link src 192.168.0.121
我不知道下一步该做什么,需要一些帮助!
答案1
你未激活 IP 转发在 sysctl 中...
到执行 IP 路由在 Ubuntu Linux 中:
sudo nano sysctl.conf
net.ipv4.ip_forward=1
net.ipv4.conf.all.forwarding=1
sudo sysctl -p