두 개의 인터페이스(두 개의 구성 파일)의 Hostapd

두 개의 인터페이스(두 개의 구성 파일)의 Hostapd

두 개의 무선 인터페이스가 있고 각 인터페이스에서 서로 다른 AP를 실행하고 싶습니다. (두 하드웨어 모두 다중 SSID를 지원하지 않습니다.)

.conf각 인터페이스에 대한 파일이 있습니다 . 어떻게 hostapd자동으로 사용할 수 있나요?

이것은 잘 작동합니다:

# hostapd -dd /etd/hostapd/hostapd.wlan0.conf /etc/hostapd/hostapd.wlan1.conf

문제는 자동으로 작동하게 만드는 것입니다.

클레임은 설정하는 것입니다/etc/default/hostapd

DAEMON_CONF="/etc/hostapd/hostapd.wlan0.conf /etc/hostapd/hostapd.wlan1.conf"

그러나 전체 문자열이 존재하지 않는 파일로 해석되기 때문에 이는 작동하지 않습니다.

나는 이것이 /usr/lib/systemd/system/hostapd.service다음과 같이 사용되는 것을 봅니다.

ExecStart=/usr/sbin/hostapd -B -P /run/hostapd.pid -B $DAEMON_OPTS ${DAEMON_CONF}

그러나 나는 또한 뭔가 다른 일을 하는 것을 보았습니다:/usr/lib/systemd/system/[email protected]

ExecStart=/usr/sbin/hostapd -B -P /run/hostapd.%i.pid $DAEMON_OPTS /etc/hostapd/%i.conf

(무슨 %i뜻인가요?) 그런데 에 관한 것보다는 systemctl아는 것에 관한 것 같습니다 .hostapdhostapd@

답변1

질문의 끝에 거의 도달했습니다. %i에 사용됩니다인스턴스화제공하다. 다음은 에 설명된 인스턴스 역할에서 발췌한 것입니다.시스템 유닛(5):

유닛 파일은 "인스턴스 이름"이라는 단일 매개변수를 사용하여 매개변수화할 수 있습니다. 그런 다음 단위는 여러 서비스 또는 기타 단위의 정의 역할을 하는 "템플릿 파일"을 기반으로 구축됩니다. 템플릿 단위는 이름 끝에(유형 접미사 앞) "@"가 있어야 합니다. 완전한 유닛의 이름은 "@"와 유닛 유형 접미사 사이에 인스턴스 이름을 삽입하여 구성됩니다. 유닛 파일 자체 내에서 인스턴스 매개변수는 "%i" 및 기타 지정자를 사용하여 참조할 수 있습니다. 아래를 참조하세요.

또는지정자 목록:

├─────────┼───────────────┼───────────────────────────────────────────────────┤
│         │               │For instantiated units this is the string between  │
│"%i"     │Instance name  │the first "@" character and the type suffix. Empty │
│         │               │for non-instantiated units.                        │
├─────────┼───────────────┼───────────────────────────────────────────────────┤

인스턴스화된 서비스를 사용하면 독립형 서비스가 실행됩니다.주인각 인터페이스에 대한 데몬입니다. 예를 들어, 이를 통해 한 인스턴스가 변경되거나 종료되는 동안 다른 인스턴스는 활성 상태가 보장되므로 다른 인터페이스는 영향을 받지 않습니다.

인스턴스를 사용하여 이 작업을 수행할 수 있습니다.

  • 모든 곳에서 기본 설정을 복원하고 비활성화 및 중지hostapd.service

  • 수정되지 않은 내용에 맞게 구성 이름을 바꾸십시오.주인서비스를 인스턴스화하려면 %i.conf인터페이스 이름 뒤에 다음이 필요합니다 .conf.

    mv -i /etd/hostapd/hostapd.wlan0.conf /etd/hostapd/wlan0.conf
    mv -i /etd/hostapd/hostapd.wlan1.conf /etd/hostapd/wlan1.conf
    
  • 사용인스턴스화문자로 구별되는 Hostapd 서비스 버전은 @OP에 이미 작성된 일반 인스턴스와 구성이 다릅니다. 인터페이스당 한 번:

    systemctl enable --now hostapd@wlan0
    systemctl enable --now hostapd@wlan1
    

마지막으로 데몬은 두 번 실행됩니다.

/usr/sbin/hostapd -B -P /run/hostapd.wlan0.pid   /etc/hostapd/wlan0.conf
/usr/sbin/hostapd -B -P /run/hostapd.wlan1.pid   /etc/hostapd/wlan1.conf

(그 안에 뭔가가 있지 않는 한 $DAEMON_OPTS).

답변2

/usr/lib/systemd/system/hostapd.service이 두 구성 파일을 하드코딩하도록 편집했습니다 .

편집 후 실행해야 할 것 같습니다.

# systemctl daemon-reload

불쾌한 해킹처럼 보이지만 작동합니다.

관련 정보