인터넷에 연결하지 않고 avahi를 사용하는 방법은 무엇입니까?

인터넷에 연결하지 않고 avahi를 사용하는 방법은 무엇입니까?

노트북이 라우터에서 연결이 끊어졌을 때 avahi를 사용하여 소프트웨어를 어떻게 테스트할 수 있나요?

모든 서비스는 동일한 시스템에서 실행되므로 Avahi는 모든 서비스에 대해 IP 주소 127.0.0.1을 광고합니다.

예를 들어 at의 파일을 사용하여 /etc/avahi/services/postgresql.service데이터베이스를 등록합니다.

$ cat /etc/avahi/services/postgresql.service
<?xml version="1.0" standalone="no"?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name>my_database_name</name>
  <service>
    <type>_postgresql._tcp</type>
    <port>5432</port>
  </service>
</service-group>

라우터에 연결하면 avahi-browse서비스에 다음이 표시됩니다.

$ avahi-browse -a | grep my_database_name
+  wlan0 IPv6 my_database_name                              PostgreSQL Server    local
+  wlan0 IPv4 my_database_name                              PostgreSQL Server    local

라우터 연결을 끊으면 avahi-browse더 이상 서비스가 표시되지 않으며 소프트웨어가 데이터베이스를 찾을 수 없습니다.

$ avahi-browse -a

연결을 끊었을 때의 인터페이스 정보는 다음과 같습니다.

$ ifconfig
eth0      Link encap:Ethernet  HWaddr f0:de:f1:ac:a6:37  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:20 Memory:f3900000-f3920000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:3637633 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3637633 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1242209987 (1.2 GB)  TX bytes:1242209987 (1.2 GB)

저는 Ubuntu 14.04를 실행하고 있지만 다른 배포판에서도 이 작업을 수행해야 할 수도 있습니다.

고쳐 쓰다: (바쁜) 친구가 나에게 다음과 같은 메시지를 보냈으나 아직 확인하지 못했습니다.

Avahi는 본질적으로 루프 인터페이스에 올바르게 바인딩하지 않습니다. 가상 인터페이스(최상의 솔루션)를 열거나 물리적 인터페이스에서 라우팅할 수 없는 번호를 열 수 있습니다. (작동하지만 임시 연결을 사용하면 문제가 발생할 수 있습니다.)

답변1

MULTICASTAvahi에서는 플래그를 설정하려면 인터페이스가 필요합니다 . 그건,

ifconfig dummy0 multicast

MULTICAST플래그가 설정되면 avahi는 인터페이스가 avahi 구성에서 허용되지 않는 한 다시 시작하거나 avahi 구성을 방해하지 않고 해당 인터페이스의 서비스를 자동으로 광고합니다.

답변2

제가 좀 조사해 본 결과 Chromim 프로젝트 이슈 트래커에 있는 이 티켓이 귀하가 원하는 것과 비슷할 것 같습니다. 티켓:문제 288385: P2P: 피어의 개인 네트워크를 시뮬레이션하기 위해 가짜 avahi/zeroconf 네트워크 작성다음과 같은 설명이 있습니다.

프로젝트 회원 기자[이메일 보호됨], 2013년 9월 9일

우리는 한 컴퓨터에서 P2P 테스트를 실행하고 다른 피어를 가짜로 만들고 싶습니다. 이를 위해서는 동일한 네트워크에 있는 다른 DUT의 서비스가 표시되고 서비스가 네트워크에 노출되는 것을 방지하기 위해 avahi/zeroconf 트래픽을 격리해야 합니다.

p2p 및 update_engine에서 사용하는 libavahi는 개인 API를 사용하여 DBus를 통해 avahi-daemon에 연결하므로 avahi-daemon을 가짜 구현으로 교체하려면 문서화되지 않은 이 인터페이스를 구현해야 합니다. libavahi를 교체하려면 다른 버전을 컴파일하거나 가짜 libavahi 인터페이스를 사용해야 하므로 자동화된 테스트 통합 목적이 무산됩니다.

P2P 네트워크를 위조하려면 또 다른 옵션은 필요한 모든 avahi 트래픽을 위조하는 Python 스크립트를 사용하여 TAP 인터페이스를 생성하고 avahi-daemon이 테스트 중에 해당 인터페이스만 수신하도록 하는 것입니다(avahi-daemon을 통해 이 작업을 수행할 수 있음). 이것을 수행하십시오) 구성 파일).

이 티켓을 살펴보니 필요한 모든 부분이 들어 있는 것 같지만 이를 모두 합치는 방법을 알아내기 위한 정보가 부족합니다. 아마도 Chromium 프로젝트에 이러한 부분에 대한 도움을 요청할 수 있을 것입니다. 그렇게 하는 것이 좋은 시작점이 될 수 있습니다.

인용하다

관련 정보