В моей домашней сети есть два сервера: первый — это компьютер на базе Linux на базе Arm, работающий на собственном ядре Debian 3.4.43, второй — Arduino с Ethernet-адаптером.
Я установил avahi и apache2 на сервер Linux, установил apache mod-dnssd и настроил следующие службы:
afpd.сервис:
<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">%h</name>
<service>
<type>_afpovertcp._tcp</type>
<port>548</port>
</service>
<service>
<type>_device-info._tcp</type>
<port>0</port>
<txt-record>model=MacPro</txt-record>
</service>
</service-group>
ssh.сервис:
<service-group>
<name replace-wildcards="yes">%h</name>
<service>
<type>_ssh._tcp</type>
<port>22</port>
</service>
</service-group>
и, после того как apache mod_dnssd не сделал то, что мне нужно, также http.service:
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name>Cubie Remote</name> ## Name of the service
<service>
<type>_http._tcp</type>
<port>80</port>
</service>
</service-group>
На Arduino я использовал библиотеку для zeroconf. Я не буду раскрывать подробности, но в принципе она должна рекламировать службу, похожую на http.service с тем же типом и портом, но с другим именем на другом сервере.
Пока все хорошо, работает следующее (с заявленным http-сервисом или без него):
- Я нахожу службу afp на моем iMac Finder (OS X 10.9.1) и даже правильный значок MacPro, и я могу подключиться к нему.
- Я также могу подключиться по ssh с server1.local к серверу Linux
- Я могу открыть сайты server1.local и server2.local с помощью Firefox и Chrome.
- Я также могу открыть эти веб-сайты по URL-адресам на моем iPhone и iPad (Safari)
НО: на моем iMac, в Safari 7.0.1
- Я нахожу веб-сервисы, рекламируемые в избранном Bonjour
- Когда я нажимаю на одну из них, в адресной строке появляется соответствующий URL (с точкой в конце, но я слышал, что это правильно)
- Страница зависает и через некоторое время появляется сообщение «Safari не может подключиться к серверу».
- То же самое происходит, когда я вручную ввожу server1.local в адресную строку.
- Я также нахожу свой маршрутизатор в панели избранного Bonjour, но Safari может подключиться к нему только после удаления конечной точки (я предполагаю, что тогда он использует информацию «dns» маршрутизатора, а не одноадресные/многоадресные сообщения zeroconf).
- Все веб-сайты работают, когда я ввожу IP-адрес в адресную строку или когда я вручную добавляю серверы в файл /etc/hosts на моем iMac.
Похоже, что Safari ожидает особого рода чистый http или какую-то авторизацию, чтобы иметь возможность подключиться к рекламируемой службе. Есть идеи, что это может вызвать? Или я просто слепой и в Safari и/или настройках безопасности есть очевидный флажок, который нужно поставить?
Похоже, это уникально для Safari, так как имена корректно разрешаются в Chrome и Firefox (а в терминале с помощью ping, ssh и т. д. я даже могу подключиться к серверам через telnet на порту 80).
решение1
ok, так вот я и отвечаю на свой собственный вопрос. У меня установлен антивирус Sophos, потому что я параноик ;) Я увидел некоторые записи в журнале, которые на самом деле не связаны с веб-сервисом на iMac. Короче говоря, отключение веб-защиты в антивирусе Sophos заставило вышеуказанное явление исчезнуть, причем немедленно...