내 ISP는 스트리밍 예와 같은 IPTV 기능을 제공합니다 udp://@239.255.2.97:5500
. macOS에서 IPTV를 시청하고 싶어서 VLC를 사용합니다.
처음에는 IPTV가 전혀 작동하지 않았습니다. 처음에는 ISP의 미디어 박스에 어떻게든 잠겨 있는 줄 알았습니다. 그런 다음 다양한 장치에서 테스트했고 Windows를 실행하는 동일한 Mac, Apple TV, Redmi 휴대폰 및 다양한 iOS 장치 등 모든 곳에서 작동했습니다. 몇번의 구글링 끝에 찾은해결책: sudo sysctl net.inet.igmp.sendra=0
VLC가 스트림을 재생하도록 터미널에서 실행합니다. (기본 버전을 2로 강제할 필요는 없습니다)
그런데 스트림이 04:20 ±1초 후에 중지되었고 스트림을 다시 시작해야만 다시 재생할 수 있다는 것을 알았습니다. 위에 언급된 다른 장치/플랫폼에서는 이런 일이 발생하지 않습니다. 나는 2개의 Mac을 가지고 있습니다 - Mojave를 실행하는 mbp(SIP 꺼짐)와 Catalina를 실행하는 미니(SIP 켜짐) - 두 가지 모두에서 발생하며 유선/무선 연결 및 사용된 소프트웨어(VLC 및 Kodi 시도)에는 차이가 없습니다.
나는 이 문제를 해결하는 방법을 전혀 모르고 인터넷에서 이에 대한 정보를 찾을 수 없습니다. 도움을 주시면 대단히 감사하겠습니다.
필요한 모든 정보를 제공하겠습니다. 필요한 정보를 얻으려면 필요한 명령을 실행하는 것이 좋습니다.
기본 IGMP 설정은 두 Mac 모두에서 동일합니다.
❯ sysctl net.inet.igmp
net.inet.igmp.recvifkludge: 1
net.inet.igmp.sendra: 1
net.inet.igmp.sendlocal: 1
net.inet.igmp.v1enable: 1
net.inet.igmp.v2enable: 1
net.inet.igmp.legacysupp: 0
net.inet.igmp.default_version: 3
net.inet.igmp.gsrdelay: 10
net.inet.igmp.debug: 0
ifconfig -a
도움이 된다면 여기 내 Mac이 있습니다.
무선 MBP:
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
nd6 options=201<PERFORMNUD,DAD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
EHC250: flags=0<> mtu 0
EHC253: flags=0<> mtu 0
en0: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
options=b<RXCSUM,TXCSUM,VLAN_HWTAGGING>
ether 58:b0:35:f4:e6:de
nd6 options=201<PERFORMNUD,DAD>
media: autoselect (none)
status: inactive
en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 58:b0:35:7a:2f:13
inet6 fe80::108d:a3b7:c229:4e24%en1 prefixlen 64 secured scopeid 0x7
inet 192.168.1.69 netmask 0xffffff00 broadcast 192.168.1.255
inet6 2a00:1370:8131:b399:803:904:7e51:a50b prefixlen 64 autoconf secured
inet6 2a00:1370:8131:b399:7944:3d6c:3303:58b prefixlen 64 autoconf temporary
inet6 2a00:1370:8131:b399:f628:52b3:28ae:8d54 prefixlen 64 dynamic
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active
fw0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 4078
lladdr d8:30:62:ff:fe:f0:e9:aa
nd6 options=201<PERFORMNUD,DAD>
media: autoselect <full-duplex>
status: inactive
p2p0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2304
ether 0a:b0:35:7a:2f:13
media: autoselect
status: inactive
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 2000
inet6 fe80::83e0:2ce2:8c0d:e1a7%utun0 prefixlen 64 scopeid 0xa
nd6 options=201<PERFORMNUD,DAD>
bridge100: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=3<RXCSUM,TXCSUM>
ether 5a:b0:35:4f:b0:64
inet 192.168.2.1 netmask 0xffffff00 broadcast 192.168.2.255
inet6 fe80::58b0:35ff:fe4f:b064%bridge100 prefixlen 64 scopeid 0xb
Configuration:
id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
ipfilter disabled flags 0x2
member: en0 flags=3<LEARNING,DISCOVER>
ifmaxaddr 0 port 6 priority 0 path cost 0
nd6 options=201<PERFORMNUD,DAD>
media: <unknown type>
status: inactive
미니 케이블:
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
nd6 options=201<PERFORMNUD,DAD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=50b<RXCSUM,TXCSUM,VLAN_HWTAGGING,AV,CHANNEL_IO>
ether 14:9d:99:7c:63:cc
inet6 fe80::ee:83f2:5357:c607%en0 prefixlen 64 secured scopeid 0x4
inet6 2a00:1370:8131:b399:4b6:9a5b:7712:e480 prefixlen 64 autoconf secured
inet6 2a00:1370:8131:b399:b837:ed92:a5dc:5859 prefixlen 64 autoconf temporary
inet6 2a00:1370:8131:b399:2846:2489:ad80:fc9b prefixlen 64 dynamic
inet 192.168.1.65 netmask 0xffffff00 broadcast 192.168.1.255
nd6 options=201<PERFORMNUD,DAD>
media: autoselect (1000baseT <full-duplex,flow-control>)
status: active
en6: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether ac:de:48:00:11:22
inet6 fe80::aede:48ff:fe00:1122%en6 prefixlen 64 scopeid 0x5
nd6 options=201<PERFORMNUD,DAD>
media: autoselect (100baseTX <full-duplex>)
status: active
ap1: flags=8802<BROADCAST,SIMPLEX,MULTICAST> mtu 1500
options=400<CHANNEL_IO>
ether 3e:22:fb:a8:1b:69
media: autoselect
status: inactive
en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=400<CHANNEL_IO>
ether 3c:22:fb:a8:1b:69
inet6 fe80::805:ed7:b180:94c0%en1 prefixlen 64 secured scopeid 0x7
inet 169.254.31.79 netmask 0xffff0000 broadcast 169.254.255.255
nd6 options=201<PERFORMNUD,DAD>
media: autoselect (<unknown type>)
p2p0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2304
options=400<CHANNEL_IO>
ether 0e:22:fb:a8:1b:69
media: autoselect
status: inactive
awdl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1484
options=400<CHANNEL_IO>
ether a6:cb:ac:da:de:6b
inet6 fe80::a4cb:acff:feda:de6b%awdl0 prefixlen 64 scopeid 0x9
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active
llw0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=400<CHANNEL_IO>
ether a6:cb:ac:da:de:6b
inet6 fe80::a4cb:acff:feda:de6b%llw0 prefixlen 64 scopeid 0xa
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active
en2: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
options=460<TSO4,TSO6,CHANNEL_IO>
ether 82:fa:d0:e2:c0:01
media: autoselect <full-duplex>
status: inactive
en3: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
options=460<TSO4,TSO6,CHANNEL_IO>
ether 82:fa:d0:e2:c0:00
media: autoselect <full-duplex>
status: inactive
en4: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
options=460<TSO4,TSO6,CHANNEL_IO>
ether 82:fa:d0:e2:c0:05
media: autoselect <full-duplex>
status: inactive
en5: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
options=460<TSO4,TSO6,CHANNEL_IO>
ether 82:fa:d0:e2:c0:04
media: autoselect <full-duplex>
status: inactive
bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=63<RXCSUM,TXCSUM,TSO4,TSO6>
ether 82:fa:d0:e2:c0:01
Configuration:
id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
ipfilter disabled flags 0x0
member: en2 flags=3<LEARNING,DISCOVER>
ifmaxaddr 0 port 11 priority 0 path cost 0
member: en3 flags=3<LEARNING,DISCOVER>
ifmaxaddr 0 port 12 priority 0 path cost 0
member: en4 flags=3<LEARNING,DISCOVER>
ifmaxaddr 0 port 13 priority 0 path cost 0
member: en5 flags=3<LEARNING,DISCOVER>
ifmaxaddr 0 port 14 priority 0 path cost 0
nd6 options=201<PERFORMNUD,DAD>
media: <unknown type>
status: inactive
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1380
inet6 fe80::93a6:b158:9d1a:86ee%utun0 prefixlen 64 scopeid 0x10
nd6 options=201<PERFORMNUD,DAD>
utun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 2000
inet6 fe80::fef3:61fc:6994:82c4%utun1 prefixlen 64 scopeid 0x11
nd6 options=201<PERFORMNUD,DAD>
en8: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=400<CHANNEL_IO>
ether da:1c:79:6f:03:9d
inet6 fe80::18db:f66f:c81d:54d0%en8 prefixlen 64 secured scopeid 0x14
inet 169.254.172.225 netmask 0xffff0000 broadcast 169.254.255.255
nd6 options=201<PERFORMNUD,DAD>
media: autoselect (100baseTX <full-duplex>)
status: active
답변1
해결책. 다음 규칙을 추가합니다 /etc/pf.conf
.
anchor "multicast" {
pass proto igmp allow-opts
pass quick from any to { 224.0.0.0/4 ff00::/8 } allow-opts
}
(규칙을 별도의 파일에 넣어 앵커에 첨부하는 것도 가능합니다. PF 매뉴얼을 참조하세요)
sudo sysctl net.inet.igmp.sendra=0
더 이상 해킹이 없습니다.
문제의 근원. 개인 인터넷 액세스 애플리케이션은 PF 방화벽을 활성화하고 IGMP/멀티캐스트를 비활성화하는 자체 규칙을 로드합니다. 이는 PIA 애플리케이션이 실행되고 있지 않은 경우에도 발생합니다. 이 문제를 해결할 수 있기를 바라며 PIA 지원팀에 문의했습니다.
조사 내용.
tcpdump
Mac이 라우터의 IGMP 요청에 응답하지 않는 것으로 나타났습니다.- 마법의 04:20 시간은 125 * 2 + 10입니다. 여기서 125는 쿼리 간격이고 10은 내 라우터의 IGMP 프록시에 설정된 쿼리 응답 시간 초과입니다.
- macOS에는 기본적으로 비활성화되어 있는 PF 방화벽이 있지만 두 시스템 모두에서 활성화되어 있다는 것을 발견했습니다.
sudo pfctl -d
IPTV 및 IGMP 응답을 수정 하여 비활성화합니다. - (Apple 기본 규칙)에 있는 규칙을 비활성화해도 효과가 없었고 다음 을
/etc/pf.conf
통해 PIA 규칙을 발견했습니다sudo pfctl -sr
.anchor "com.privateinternetaccess.vpn/*" all
- Murus(PF의 UI)에서 IGMP + 멀티캐스트 규칙(솔루션에 나열됨)을 얻으세요!