Я заметил, что IP-пересылка, по-видимому, включена в WSL (Windows 10pro 1709), согласно sysctl. Я надеюсь, что смогу использовать это для создания программного маршрутизатора на WSL - для игры с трафиком виртуальной машины Hyper-V на одном физическом хосте. Виртуальная машина и хост могут взаимодействовать через общую подсеть /24 ipv4.
В идеале я хотел бы использовать WSL для настройки правил, подобных iptables, или иметь какую-то программу программного маршрутизатора с использованием сокетов RAW, которые могут переписывать трафик.
# on the WSL bash
$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
Мой хост Windows и виртуальная машина находятся в 192.168.4.Х. 192.168.4.215 - хост. 192.168.4.228 - это ВМ.
Я добавил правило в брандмауэр Windows, чтобы разрешить каждый входящий порт TCP в этой подсети, и проверил подключение, передав веб-страницы, обслуживаемые хостом WSL и загружаемые виртуальной машиной. (например, запустил python -m SimpleHTTPServer
в wsl и использовал curl http://192.168.2.215
в виртуальной машине)
Я добавил хост Windows в качестве шлюза по умолчанию внутри виртуальной машины:
# route add default gw 192.168.4.215
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.4.215 0.0.0.0 UG 0 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.4.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
Но мои TCP-соединения, инициированные на виртуальной машине , не маршрутизируются Windows (например, curl http://<publicip>
.). Не могу подключиться
Что еще мне нужно разблокировать в Windows?
редактировать
Я несколько разочаровался в этом. Поскольку все, что я хотел сделать с трафиком виртуальной машины, - это трансформировать его через VPN-туннель хоста, я решил использовать специальный интерфейс NAT с powershell:
https://serverfault.com/questions/911578/windows-10-pro-as-a-nat-between-two-interfaces