Apple TV (BTV) 설정

Unifi OS 8.x로 오면서 igmpproxy라는 옵션이 제공 됩니다. 기본적으로 igmpproxy을 활성화하면 IPTV 시청이 가능해지나 현재 기능이 잘 동작하지 않아 TV는 나오지만 지속적으로 끊어지는 문제가 발생 됩니다. (채널 변경 시 5분마다 멈춤)

이런 문제점 때문에 일단 이 기능을 비활성화하고, igmpproxy 데몬을 이용한 방법을 설명합니다.

IPTV9.jpg

1. VLAN 생성

2. 멀티캐스트 DNS 및 IGMP Snooping 설정 확인


3. 방화벽 규칙 설정 #1 (IPTV Mulicast 허용)

"네트워크 > 보안 > 방화벽 규칙"으로 이동하여 항목 만들기를 눌러줍니다.

4. 방화벽 규칙 설정 #2 (IGMP Traffic 허용)

다시 "네트워크 > 보안 > 방화벽 규칙"으로 이동하여 항목 만들기를 눌러줍니다.

5. igmpproxy 데몬 설치

UDM Pro에 ssh 접속을 해야 합니다. ssh 접속은 UniFi OS의 "Console Settings"에서 Advanced에 있는 SSH를 체크 후 비밀번호를 생성해 주면 접속할 수 있습니다.



1) 터미널 프로그램에서 호스트 192.168.1.1 (포트는 기본 22), id는 root, password는 위에서 입력한 값을 넣어 ssh 접속을 합니다.
2) igmpproxy를 설치해 줍니다.

cd /mnt
mkdir data
mkdir data/igmpproxy
cd /mnt/data/igmpproxy
curl -Lo igmpproxy https://raw.githubusercontent.com/peacey/udm-telus/main/igmpproxy
curl -Lo igmpproxy.conf https://raw.githubusercontent.com/peacey/udm-telus/main/igmpproxy.conf
chmod +x igmpproxy

3) 먼저 각 포트별 값 확인을 위해 아래 명령을 실행 합니다.

ifconfig

4) igmpproxy.conf를 수정해 줍니다. (손쉬운 수정을 위해 nano를 sudo apt install nano 명령어로 설치해 줍니다. 설치된 nano는 재부팅하면 자동 삭제 되며, 일회성으로만 사용 가능합니다.)

nano /mnt/data/igmpproxy/igmpproxy.conf
quickleave

# upstream = modem interface
phyint eth8 upstream ratelimit 0 threshold 1
        altnet 0.0.0.0/0;

# lan interface of iptv device
phyint br5 downstream ratelimit 0 threshold 1
        altnet 0.0.0.0/0;

# disable all unused interfaces
phyint lo disabled
phyint eth9 disabled
./igmpproxy -ndv ./igmpproxy.conf

6. igmpproxy 데몬 실행 

./igmpproxy ./igmpproxy.conf

7. Apple TV 네트워크 VLAN 설정

IPTV6.jpg

8. 자동 시작 스크립트

UDM Pro를 재부팅 시 igmproxy 자동 시작 스트립트는 아래와 같습니다.

먼저 UDM Boot Script를 설치해야 합니다. (https://github.com/unifi-utilities/unifios-utilities)

1. 1.6.3 이상

curl -fsL "https://raw.githubusercontent.com/unifi-utilities/unifios-utilities/HEAD/on-boot-script/remote_install.sh" | /bin/sh

2. 2.4.x 이상

curl -fsL "https://raw.githubusercontent.com/unifi-utilities/unifios-utilities/HEAD/on-boot-script-2.x/remote_install.sh" | /bin/bash

설치를 하고 "/data/on_boot.d"로 이동 후 자동시작 스크립트를 작성하시면 됩니다.

cd /data/on_boot.d
curl -Lo 99-run-igmpproxy.sh https://raw.githubusercontent.com/peacey/udm-telus/main/run-igmpproxy.sh 
chmod +x 99-run-igmpproxy.sh

auto_start.jpg

UnifiOS가 4.x로 올라가면서 더이상 위에 기술된 자동시작 스크립트가 동작하지 않습니다.

어쩔수 없이 다른 서버에서 Unifi의 상태값을 체크해 igmpproxy가 시행되지 않았을 시 시작시켜주는 스크립트를 작성하였습니다.

1. 가정

  1. Unifi 게이트웨이
    1) IP : 192.168.1.1
    2) ID : root
    3) PW : pass@me
  2. 명령을 내릴 서버
    1) IP : 192.168.10.200
    2) ID : myadmin
    3) PW : pass@me

2. "192.168.10.200"에서 "192.168.1.1"로 ssh명령을 내리기 위해서는 ssh 키생성 및 복제가 필요합니다. "192.168.10.200"에 공개 ssh 키를 생성합니다.

ssh-keygen -t rsa -b 2048

제 경우 ssh 키 생성 시 그냥 엔터를 눌러 공개키를 생성 했습니다.

이제 이 공개 키 값을 복사해야 합니다.

cat ~/.ssh/id_rsa.pub

화면에 나오는 값을 복사해 줍니다.

이제 원격지에 복사된 ssh 키 값을 복사해줄 차례입니다.

ssh root@192.168.1.1

"root"는 예제이며 사용하는 ID를 넣고 접속하시고, "~/.ssh"로 이동합니다.

cd ~/.ssh

해당 디렉토리가 없을 경우 아래와 같이 생성해 주시면 됩니다.

mkdir -p ~/.ssh
chmod 700 ~/.ssh

이제 공개 키를 추가해 줍니다.

echo "복사한 공개 키" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

위 단계를 거치면 "192.168.10.200"에서 "192.168.1.1"로 비밀번호 없이 ssh 접속이 가능해 집니다.

"192.168.10.200" 서버에 아래 sh 스크립트를 만들고 저장해 줍니다.

#!/bin/bash

UNIFI_SERVER="192.168.1.1"
UNIFI_USER="root"

CHECK_PROCESS_CMD="sudo ps aux | grep 'igmpproxy.conf' | grep -v grep"
START_PROCESS_CMD="sudo nohup /mnt/data/igmpproxy/igmpproxy /mnt/data/igmpproxy/igmpproxy.conf &"

ssh ${UNIFI_USER}@${UNIFI_SERVER} << EOF

if ${CHECK_PROCESS_CMD}; then
  echo "igmpproxy.conf 프로세스가 이미 실행 중입니다. 명령을 스킵합니다."
else
  echo "igmpproxy.conf 프로세스가 실행되지 않았습니다. 실행합니다."
  ${START_PROCESS_CMD}
fi
EOF

제 경우 시놀로지와 UnRAID에서 이 스크립트를 자동 스케줄러로 등록해 실행해 주었습니다.

1. igmpproxy가 이미 실행되고 있을때

igmp1.jpg

2. igmpproxy가 실행되고 있지 않을때

igmp2.jpg

ps aux로 실행한 결과 입니다. 잘 실행되고 있습니다.

igmp3.jpg


수정본 #31
생성 2024-01-15 05:15:27 UTC, Admin
수정 2024-12-03 07:28:13 UTC, Admin