(Перенесено с https://serverfault.com/questions/895250/setting-up-ubuntu-linux-16-04-as-a-router-within-a-vm)
Я хочу настроить виртуальную машину Ubuntu в качестве маршрутизатора, на котором работает atcd, чтобы я мог проводить целевое тестирование одного устройства в различных условиях сети. Я получил работу частей, но застрял с получением шлюза для маршрутизации моих пакетов.
Суть того, что я пробовал:
- Создайте виртуальную машину Ubuntu 16.04 (
"router"
) на хосте Ubuntu 16.04 ("laptop"
) - Создано два сетевых адаптера для виртуальной машины, оба подключены к одному адаптеру WiFi хоста.
- Установите первый сетевой адаптер (
enp0s3
), который будет статически настроен, чтобы быть шлюзом, в 192.168.0.199 - Установите второй сетевой адаптер (
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 в качестве шлюза.
Теперь я могу подключиться к HTTP-серверу, работающему на router
через 192.168.0.199 и 192.168.0.100 с других компьютеров в локальной сети, которые настроены на использование маршрутизатора Wifi в качестве шлюза (192.168.0.1). ,
test-device
может пинговать хосты в Интернете, но не может настроить 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
Я в растерянности относительно того, что делать дальше, и мог бы помочь!