문제 해결

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

Apple TV Infuse + Plex (http 500) 문제

해결책을 확인하고 있습니다.

Infuse에서 Plex 라이브러리를 불러올때 다이렉트 연결이 아닌 Plex Relay 서버로 우회 접속돼서

발생되는 대역폭 제한 문제로 예상됩니다.

Plex Relay 서버를 통해 접근될 시 Plex Pass User는 2MB, 일반 User는 1MB의 대역폭 제한이 자동으로 걸려버립니다. (Plex 공식 문서에서 확인)

현재 추정되는 원인은 아래 두가지 경우 입니다.

  1. Unifi의 Firewall Rule 문제 가능성
    - Firewall 설정을 해보았는데도 해결이 안되어 upnp를 활성화하니, Plex에서 다이렉트 접속이 되는것까지는 확인하였습니다. 아직 실제 문제가 해결되었는지는 확인해 보질 않았습니다. --> upnp로는 해결이 안됩니다.

  2. 앞장 BTV 때문에 설정한 "igmpproxy.conf"에 의한 문제 가능성 --> 가능성 없음 (프로세스 종료 후에도 동일 증상)
    - 이 부분이 대역폭 제한과 연관성이 있어 1번에서 해결이 되지 않는다면 이 부분을 좀더 연구해 볼 예정입니다.

원인은 Infuse와 Plex 문제 둘다가 아니고, VLAN상 서로 통신이 되지 않는 문제였습니다. 방화벽을 아무리 만져보아도 해결이 안되어 Plex 서버와 Apple TV를 같은 VLAN 네트워크에 위치해 놓고 쓰고 있습니다.

서버내의 도커 네트워크가 문제 였습니다. 도커네트워크와 서버의 네트워크 라우팅이 충돌해서, 도커 네트워크 대역대롤 한곳으로 다 이동시켜 해결했습니다.