Я сейчас бегу coLinux настроен в сетевом режиме «ndis-bridged» на машине, чья беспроводная сетевая карта или драйвер кажется неспособным или не желающим принимать нешироковещательный трафик уровня 2 или трафик, не предназначенный для основного MAC-адреса беспроводной карты.
Выяснив, что это проблема, я попытался настроить интерфейс coLinux так, чтобы он имел тот же MAC-адрес, что и хост-машина. Волшебным образом сеть заработала. К сожалению, остается только одна проблема: хост-машина не может взаимодействовать с экземпляром coLinux, хотя остальная часть локальной сети может.
Я понял, что, добавив статическую запись ARP к хосту для IP-адреса (ов) экземпляра coLinux, я смогу обеспечить полное соединение в мостовом режиме, даже если беспроводная карта / драйвер не хотели подыгрывать.
Несмотря на хакерство этой настройки, я хотел бы сохранить ее по нескольким причинам, в первую очередь из-за производительности ввода-вывода для экземпляра coLinux. Это подводит меня к проблеме: сохранение записей ARP на хост-машине.
Я искал в Интернете, но не смог найти эквивалент WinNT /etc/arp
из UNIX. Такой файл существует? Я подозревал где-то в реестре, но, увы, поиски пока безрезультатны.
Моя единственная альтернатива - запустить командный файл при запуске, чтобы воссоздать записи ARP с помощью arp
инструмент командной строки, но это, по иронии судьбы, кажется хакерским. :)
Спасибо.
netsh interface ipv4 add neighbors "Local Area Connection" 10.1.1.1 12-34-56-78-9a-bc
это создаст статическую запись arp, которая переживает перезагрузки. будьте осторожны при добавлении записей, так как вы не сможете удалить их без исправления:
netsh
больше не является предпочтительным методом управления сетевым интерфейсом в системе Windows. По возможности следует использовать Windows Powershell или Powershell Core. Сначала вам нужно узнать индекс интерфейса интерфейса, к которому вы хотите применить запись кэша ARP:
Get-NetAdapter
Что возвращает:
Name InterfaceDescription ifIndex Status MacAddress LinkSpeed
---- -------------------- ------- ------ ---------- ---------
Wi-Fi Intel(R) Dual Band Wireless-AC 8260 18 Disconnected 12-34-56-AB-CD-EF 6 Mbps
Ethernet Intel(R) Ethernet Connection (2) I219-… 9 Up 78-90-12-GH-IJ-KL 1 Gbps
Это список ваших сетевых адаптеров. Обратите внимание на ifIndex
свойство для рассматриваемого сетевого адаптера. Что касается меня, я использую свой адаптер Ethernet, поэтому я буду использовать ifIndex
9 в моем примере.
Чтобы создать статическую запись кэша ARP для этого интерфейса:
New-NetNeighbor -InterfaceIndex 9 -IPAddress '192.168.0.10' -LinkLayerAddress '0000120000ff' -State Permanent
Что возвращает:
ifIndex IPAddress LinkLayerAddress State PolicyStore
------- --------- ---------------- ----- -----------
9 192.168.0.10 00-00-12-00-00-ff Permanent PersistentStore
Это установит постоянные записи кэша ARP, которые сохранятся после перезагрузки. Вы можете перезагрузиться, а затем еще раз проверить, запустив следующее:
Get-NetNeighbor -InterfaceIndex 9 -IPAddress 192.168.0.10
Что возвращает:
ifIndex IPAddress LinkLayerAddress State PolicyStore
------- --------- ---------------- ----- -----------
9 192.168.0.10 00-00-12-00-00-FF Permanent ActiveStore
Вы можете удалить только что созданную запись, запустив это:
Remove-NetNeighbor -InterfaceIndex 9 -IPAddress '192.168.0.10'
Вам будет предложено подтверждение дважды: один раз для удаления записи из активного хранилища и один раз для постоянного хранилища. Подтвердить да to для обоих, чтобы полностью удалить запись. Вы можете опустить -InterfaceIndex
параметр, чтобы удалить запись из всех хранилищ интерфейсов.
В Windows нет встроенного механизма для постоянных записей ARP. Лучше всего использовать сценарий запуска, чтобы указать необходимые статические записи ARP при каждой загрузке.
Вы должны иметь возможность использовать команду arp -s, чтобы добавить статическую запись в таблицу ARP.
arp -s 157.55.85.212 00-aa-00-62-c6-09 .... Добавляет статическую запись.
Проблема с драйверами NDIS заключается в том, что они добавляют дополнительный уровень между ОС и сетевой картой, что затрудняет работу на уровне Layer2 (особенно с беспроводными картами). Глядя на сайт coLinux (http://colinux.wikia.com/wiki/Network#Recommended_Setup) они рекомендуют использовать 2 виртуальных интерфейса: один для coLinux для связи с локальной сетью, а другой для coLinux для связи с хостом. Вы рассматривали эту конфигурацию?
Есть команда arp -s
в Windows для этого, но будьте осторожны, я думаю, что из Vista он больше не работает (просто протестировал его в Win10 с помощью административной командной строки). arp
не показывает ошибки, но после arp -a
запись не отображается.
Единственный способ, как написал @goofology, - через netsh
. Несколько лет назад эта проблема стоила мне некоторого времени, я пробовал ее на нескольких компьютерах. [не могу комментировать ответ Конора с arp -s
предложение, поэтому я делаю это как ответ для всех, кто пытается сделать это через arp -s
]