docs: updatet docker templates and added iptv-org-epg template (#790)

This commit is contained in:
knylbyte
2026-07-15 12:52:16 +02:00
committed by GitHub
parent d4da4466ac
commit a63e6e4ca5
28 changed files with 634 additions and 198 deletions
+7 -6
View File
@@ -247,7 +247,7 @@ Generate all four formats simultaneously from the same source — one setup, eve
### 16. Operations & Deployment
- **Docker**: Alpine and Scratch images — minimal image size
- **Docker Compose templates**: traefik, crowdsec, gluetun/socks5 templates ready to use
- **Docker Compose templates**: traefik, crowdsec, gluetun/socks5, iptv-org/epg templates ready to use
- **Zero-downtime config reload**: `ArcSwap<Config>` for atomic configuration swaps without interruption
- **Disk-based processing**: Playlist processing from disk instead of RAM — massively reduced memory consumption
- **CLI mode**: One-shot processing without a server — ideal for scripting and CI/CD
@@ -274,7 +274,7 @@ Generate all four formats simultaneously from the same source — one setup, eve
- Runs on Raspberry Pi and tiny VPS instances
- Minimal resource usage thanks to Rust and disk-based processing
- **Runs 24/7 for months with rock-solid stability and near-zero maintenance**
- Traefik/Crowdsec/Gluetun templates ready to deploy
- Traefik/Crowdsec/Gluetun/IPTV-org-epg templates ready to deploy
### For Multi-User Operations
@@ -294,10 +294,11 @@ Generate all four formats simultaneously from the same source — one setup, eve
## 🐋 Docker Container Templates
- traefik template
- crowdsec template
- gluetun/socks5 template
- tuliprox (incl. traefik) template
- [traefik](docker/container-templates/traefik/) template
- [crowdsec](docker/container-templates/crowdsec/) template
- [gluetun/socks5](docker/container-templates/gluetun/) template
- [iptv-org-epg](docker/container-templates/iptv-org/) template
- [tuliprox](docker/container-templates/tuliprox/) (incl. traefik) template
`> ./docker/container-templates`
+60 -26
View File
@@ -52,8 +52,8 @@ Set timezone in docker-compose.yml like
## Docker Container Templates — Deployment Guide
This repository contains ready-to-use Docker Compose templates for a secure reverse proxy stack with VPN egress and CrowdSec protection. It includes
**Traefik**, **Gluetun** (WireGuard) with optional proxy sidecars, **CrowdSec** with Traefik integration, and an example **Tuliprox** app wired for
reverse proxying.
**Traefik**, **Gluetun** (WireGuard) with optional proxy sidecars, **CrowdSec** with Traefik integration, an **IPTV-org-epg** service, and an example
**Tuliprox** app wired for reverse proxying.
> **Software baseline:** Traefik v3.5, a current Rust toolchain, and a current Docker/Compose setup.
@@ -61,12 +61,13 @@ reverse proxying.
## Legend
| Template | Folder | Purpose | Notable Ports (internal unless published) |
| ------------ | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------ |
| **Traefik** | `container-templates/traefik/` | Reverse proxy & TLS (ACME/DNS), dashboard, dynamic security middlewares, optional CrowdSec bouncer. | 80 `web`, 443 `websecure` |
| **Gluetun** | `container-templates/gluetun/` | VPN egress via WireGuard; sidecars provide **SOCKS5**, **HTTP**, and **Shadowsocks** proxies bound to Gluetuns network stack. | 1080/tcp (HTTP), 1388/tcp+udp (SOCKS5), 9388/tcp+udp (Shadowsocks) |
| **CrowdSec** | `container-templates/crowdsec/` | LAPI + bouncers (Traefik & firewall) to protect services. | LAPI on `127.0.0.1:8080` (host) |
| **Tuliprox** | `container-templates/tuliprox/` | Example application container with Traefik labels and `expose: 8901` for reverse proxying. | 8901 (internal) |
| Template | Folder | Purpose | Notable Ports (internal unless published) |
| ---------------- | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------ |
| **Traefik** | `container-templates/traefik/` | Reverse proxy & TLS (ACME/DNS), dashboard, dynamic security middlewares, optional CrowdSec bouncer. | 80 `web`, 443 `websecure` |
| **Gluetun** | `container-templates/gluetun/` | VPN egress via WireGuard; sidecars provide **SOCKS5**, **HTTP**, and **Shadowsocks** proxies bound to Gluetuns network stack. | 1080/tcp (HTTP), 1388/tcp+udp (SOCKS5), 9388/tcp+udp (Shadowsocks) |
| **CrowdSec** | `container-templates/crowdsec/` | LAPI + bouncers (Traefik & firewall) to protect services. | LAPI on `127.0.0.1:8080` (host) |
| **Tuliprox** | `container-templates/tuliprox/` | Example application container with Traefik labels and `expose: 8901` for reverse proxying. | 8901 (internal) |
| **IPTV-org-epg** | `container-templates/iptv-org/` | Generates and serves a local XMLTV guide from a manually curated channel list. | 3000 (internal) |
---
@@ -94,15 +95,9 @@ container-templates/
│ ├─ .env.http-proxy
│ ├─ .env.socks5-proxy
│ ├─ .env.ss-proxy
│ ├─ gluetun-01/
│ │ ├─ .env.wg-01
│ ├─ gluetun/
│ │ ├─ .env.wg
│ │ └─ docker-compose.yml
│ ├─ gluetun-02/
│ │ ├─ .env.wg-02
│ │ └─ docker-compose.yml
│ └─ gluetun-03/
│ ├─ .env.wg-03
│ └─ docker-compose.yml
├─ crowdsec/
│ ├─ .env.cs-bouncer-firewall
│ ├─ .env.cs-bouncer-traefik
@@ -118,7 +113,11 @@ container-templates/
│ ├─ firewall-bouncer/
│ │ └─ config/crowdsec-firewall-bouncer.yaml
│ └─ docker-compose.yml
─ tuliprox/
─ tuliprox/
│ └─ docker-compose.yml
└─ iptv-org/
├─ data/
│ └─ channels.xml
└─ docker-compose.yml
```
@@ -207,15 +206,15 @@ docker logs -f traefik
**Folder:** `container-templates/gluetun/`
Each instance (`gluetun-01`, `gluetun-02`, `gluetun-03`) has its own `.env.wg-0x` with WireGuard settings. Sidecars (e.g., `socks5-02`) use
`network_mode: service:gluetun-02` to share Gluetuns network. Otherwise connect the provided proxies within your tuliprox instance through traefik.
Each instance (`gluetun`) has its own `.env.wg` with WireGuard settings. Sidecars (e.g., `socks5`) use
`network_mode: service:gluetun` to share Gluetuns network. Otherwise connect the provided proxies within your tuliprox instance through traefik.
### Configure minimum one instance (example: gluetun-02)
### Configure minimum one instance (example: gluetun)
1. Edit WireGuard values:
```bash
nano container-templates/gluetun/gluetun-02/.env.wg-02
nano container-templates/gluetun/.env.wg
# WIREGUARD_PRIVATE_KEY=...
# WIREGUARD_ADDRESSES=...
# WIREGUARD_PUBLIC_KEY=...
@@ -233,8 +232,8 @@ Each instance (`gluetun-01`, `gluetun-02`, `gluetun-03`) has its own `.env.wg-0x
3. Start:
```bash
docker compose -f container-templates/gluetun/gluetun-02/docker-compose.yml up -d
docker logs -f gluetun-02
docker compose -f container-templates/gluetun/docker-compose.yml up -d
docker logs -f gluetun
```
### Test from your Docker host
@@ -344,6 +343,36 @@ labels:
---
## 5) IPTV-org-epg (EPG guide)
**Folder:** `container-templates/iptv-org/`
### Configure
1. Copy the desired `<channel>` entries from the IPTV-org `sites` files to
`container-templates/iptv-org/data/channels.xml`.
2. Ensure every `xmltv_id` exactly matches the corresponding `@epg_channel_id` in Tuliprox. For example,
`xmltv_id="BBCOne.uk@LondonHD"` matches `@epg_channel_id = "BBCOne.uk@LondonHD"`. If necessary, adjust `xmltv_id` in
`channels.xml` or set the corresponding `@epg_channel_id` in `mapping.yml`.
3. Add the generated guide to the corresponding input in your `source.yml`:
```yaml
epg:
sources:
- url: http://iptv-org-epg:3000/guide.xml
```
### Start
```bash
docker compose -f container-templates/iptv-org/docker-compose.yml up -d
docker logs -f iptv-org-epg
```
The generated `guide.xml` is written to `container-templates/iptv-org/data/`.
---
## Quick Start (end-to-end)
```bash
@@ -358,9 +387,9 @@ echo "<your-dns-api-token>" > cf-token && chmod 600 cf-token
# Fix .env and config/traefik.yml (ACME email, dnsChallenge provider, etc.)
docker compose up -d
# 2) Gluetun (e.g., instance 02)
cd ../gluetun/gluetun-02
# Fill .env.wg-02; optionally enable sidecars via ../.env.* files
# 2) Gluetun
cd ../gluetun
# Fill .env.wg and configure the main-container proxies in the local .env.* proxy files
docker compose up -d
# 3) Tuliprox
@@ -371,6 +400,11 @@ docker compose up -d
cd ../crowdsec
# Fill .env.cs-bouncer-*
docker compose up -d
# 5) IPTV-org-epg
cd ../iptv-org
# Fill data/channels.xml and match every xmltv_id with @epg_channel_id
docker compose up -d
```
---
@@ -1,3 +1,4 @@
---
appsec_config: crowdsecurity/appsec-default
labels:
type: appsec
@@ -1,3 +1,4 @@
---
# Docker-JSON
filenames:
- /var/lib/docker/containers/**/*.log
@@ -1,3 +1,4 @@
---
# iptables
filenames:
- /var/log/messages
@@ -1,3 +1,4 @@
---
# Mail
filenames:
- /var/log/mail.log
@@ -1,3 +1,4 @@
---
filenames:
- /var/log/ssh.log # Alpine
- /var/log/auth.log # Debian/Ubuntu
@@ -1,3 +1,4 @@
---
# System & Auth
filenames:
- /var/log/messages
@@ -1,3 +1,4 @@
---
filenames:
- /var/log/traefik/*
labels:
@@ -0,0 +1,12 @@
---
name: local/tuliprox-cover-parser-whitelist
description: Ignore expected Tuliprox Xtream image fetches before scenarios
filter: 'evt.Meta.log_type == "http_access-log"'
whitelist:
reason: "Ignore expected Tuliprox 4xx/5xx Xtream image GETs"
expression:
- >
evt.Meta.traefik_router_name in ["tuliprox@docker", "tuliprox-secure@docker"] &&
evt.Meta.http_verb == "GET" &&
evt.Meta.http_status matches "^[45][0-9][0-9]$" &&
evt.Meta.http_path matches "^(/[^/?#]+)*/resource/(live/[^/]+/[^/]+/[0-9]+/(logo|logo_small)|movie/[^/]+/[^/]+/[0-9]+/(logo|logo_small|nfo_cover_big|nfo_movie_image|nfo_backdrop_path_[0-9]+)|series/[^/]+/[^/]+/[0-9]+/(logo|logo_small|cover|backdrop_path_[0-9]+|nfo_s_[0-9]+_(cover|cover_tmdb|cover_big)|nfo_ep_[0-9]+_[0-9]+_movie_image))$"
@@ -8,15 +8,16 @@ services:
- 127.0.0.1:8080:8080
security_opt:
- apparmor=docker-default # security_opts are optional
restart: on-failure
restart: unless-stopped
environment:
TZ: America/Chicago
GID: "${GID:-1000}"
COLLECTIONS: >
crowdsecurity/linux
crowdsecurity/iptables
crowdsecurity/iptables
crowdsecurity/http-cve
crowdsecurity/base-http-scenarios
crowdsecurity/nginx
crowdsecurity/traefik
crowdsecurity/whitelist-good-actors
crowdsecurity/sshd
@@ -53,7 +54,7 @@ services:
depends_on:
crowdsec:
condition: service_healthy
restart: on-failure
restart: unless-stopped
security_opt:
- apparmor=docker-default # security_opts are optional
env_file:
@@ -62,7 +63,7 @@ services:
firewall-bouncer:
image: ghcr.io/knylbyte/cs-firewall-bouncer:latest
container_name: cs-bouncer-firewall
restart: on-failure
restart: unless-stopped
network_mode: host
cap_add:
- NET_ADMIN
@@ -1,3 +1,4 @@
---
mode: iptables
update_frequency: 10s
log_mode: stdout # file, stdout, syslog
@@ -1,3 +1,4 @@
PROXY_USER="<socks5-proxy-user>"
PROXY_PASSWORD="<socks5-proxy-password>"
PROXY_PORT=1388
SOCKS5_ENABLED=ON
SOCKS5_LISTENING_ADDRESS=:1388
SOCKS5_USER="<socks5-proxy-user>"
SOCKS5_PASSWORD="<socks5-proxy-password>"
@@ -1,8 +1,8 @@
services:
gluetun-01:
gluetun:
image: qmcgaw/gluetun:latest
container_name: gluetun-01
restart: on-failure
container_name: gluetun
restart: unless-stopped
security_opt:
- apparmor=docker-default # security_opts are optional
networks:
@@ -17,9 +17,10 @@ services:
cap_add:
- NET_ADMIN
env_file:
- ../.env.http-proxy
- ../.env.ss-proxy
- .env.wg-01
- .env.http-proxy
- .env.socks5-proxy
- .env.ss-proxy
- .env.wg
volumes:
- ./conf:/gluetun/
devices:
@@ -34,19 +35,6 @@ services:
timeout: 5s
retries: 1
socks5-01:
image: serjs/go-socks5-proxy:latest
container_name: socks5-01
restart: on-failure
security_opt:
- apparmor=docker-default # security_opts are optional
network_mode: service:gluetun-01
env_file: ../.env.socks5-proxy
depends_on:
gluetun-01:
condition: service_healthy
restart: true
networks:
proxy-net:
external: true
@@ -1,10 +0,0 @@
VPN_SERVICE_PROVIDER=custom
VPN_TYPE=wireguard
WIREGUARD_PRIVATE_KEY=
WIREGUARD_ADDRESSES=
WIREGUARD_PUBLIC_KEY=
WIREGUARD_ENDPOINT_IP=
WIREGUARD_ENDPOINT_PORT=51820
WIREGUARD_MTU=1420
WIREGUARD_PERSISTENT_KEEPALIVE_INTERVAL=25s
@@ -1,53 +0,0 @@
services:
gluetun-02:
image: qmcgaw/gluetun:latest
container_name: gluetun-02
restart: on-failure
security_opt:
- apparmor=docker-default # security_opts are optional
networks:
- proxy-net
expose:
- 1080/tcp # HTTP
- 1388/tcp # SOCKS5
- 1388/udp # SOCKS5
- 9388/tcp # SHADOWSOCKS
- 9388/udp # SHADOWSOCKS
# - 8888/tcp # METRICS
cap_add:
- NET_ADMIN
env_file:
- ../.env.http-proxy
- ../.env.ss-proxy
- .env.wg-02
volumes:
- ./conf:/gluetun/
devices:
- /dev/net/tun:/dev/net/tun
environment:
- TZ=America/Chicago
- UPDATER_PERIOD=24h
healthcheck:
test: ["CMD", "/gluetun-entrypoint", "healthcheck"]
start_period: 10s
interval: 5s
timeout: 5s
retries: 1
socks5-02:
image: serjs/go-socks5-proxy:latest
container_name: socks5-02
restart: on-failure
security_opt:
- apparmor=docker-default # security_opts are optional
network_mode: service:gluetun-02
env_file: ../.env.socks5-proxy
depends_on:
gluetun-02:
condition: service_healthy
restart: true
networks:
proxy-net:
external: true
name: proxy-net
@@ -1,10 +0,0 @@
VPN_SERVICE_PROVIDER=mullvad
VPN_TYPE=wireguard
WIREGUARD_PRIVATE_KEY=
WIREGUARD_ADDRESSES=
WIREGUARD_PUBLIC_KEY=
WIREGUARD_ENDPOINT_IP=
WIREGUARD_ENDPOINT_PORT=51820
WIREGUARD_MTU=1420
WIREGUARD_PERSISTENT_KEEPALIVE_INTERVAL=25s
OWNED_ONLY=yes
@@ -1,53 +0,0 @@
services:
gluetun-03:
image: qmcgaw/gluetun:latest
container_name: gluetun-03
restart: on-failure
security_opt:
- apparmor=docker-default # security_opts are optional
networks:
- proxy-net
expose:
- 1080/tcp # HTTP
- 1388/tcp # SOCKS5
- 1388/udp # SOCKS5
- 9388/tcp # SHADOWSOCKS
- 9388/udp # SHADOWSOCKS
# - 8888/tcp # METRICS
cap_add:
- NET_ADMIN
env_file:
- ../.env.http-proxy
- ../.env.ss-proxy
- .env.wg-03
volumes:
- ./conf:/gluetun/
devices:
- /dev/net/tun:/dev/net/tun
environment:
- TZ=America/Chicago
- UPDATER_PERIOD=24h
healthcheck:
test: ["CMD", "/gluetun-entrypoint", "healthcheck"]
start_period: 10s
interval: 5s
timeout: 5s
retries: 1
socks5-03:
image: serjs/go-socks5-proxy:latest
container_name: socks5-03
restart: on-failure
security_opt:
- apparmor=docker-default # security_opts are optional
network_mode: service:gluetun-03
env_file: ../.env.socks5-proxy
depends_on:
gluetun-03:
condition: service_healthy
restart: true
networks:
proxy-net:
external: true
name: proxy-net
@@ -0,0 +1,450 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<!-- !!! THIS IS JUST AN EXAMPLE !!! -->
<channel site="sky.com" site_id="1023" lang=w"en" xmltv_id="AlJazeera.qa@English">Al Jazeera HD</channel>
<channel site="sky.com" site_id="1352" lang="en" xmltv_id="AnimalPlanet.uk@Plus1">Animal Plnt+1</channel>
<channel site="sky.com" site_id="2402" lang="en" xmltv_id="AnimalPlanet.uk@SD">Animal Planet</channel>
<channel site="sky.com" site_id="1066" lang="en" xmltv_id="ArirangWorld.kr@SD">Arirang TV HD</channel>
<channel site="sky.com" site_id="4265" lang="en" xmltv_id="ARYDigital.pk@UK">ARY Digital</channel>
<channel site="sky.com" site_id="1009" lang="en" xmltv_id="ARYQtv.pk@SD">QTV Religious</channel>
<channel site="sky.com" site_id="6753" lang="en" xmltv_id="ATNBanglaUK.uk@SD">ATN</channel>
<channel site="sky.com" site_id="5703" lang="en" xmltv_id="B4UMovies.in@UK">B4U Movies</channel>
<channel site="sky.com" site_id="5708" lang="en" xmltv_id="B4UMusic.in@UK">B4U Music</channel>
<channel site="sky.com" site_id="3400" lang="en" xmltv_id="Babenation.uk@SD">Babenation</channel>
<channel site="sky.com" site_id="4197" lang="en" xmltv_id="BabesandBrazzers.uk@SD">babes&amp;brazzers</channel>
<channel site="sky.com" site_id="3645" lang="en" xmltv_id="BabyTV.uk@UK">BabyTV</channel>
<channel site="sky.com" site_id="2091" lang="en" xmltv_id="BBCFour.uk@IrelandHD">BBC Four HD</channel>
<channel site="sky.com" site_id="2086" lang="en" xmltv_id="BBCFour.uk@UKHD">BBC Four HD</channel>
<channel site="sky.com" site_id="2085" lang="en" xmltv_id="BBCNews.uk@UKHD">BBC NEWS HD</channel>
<channel site="sky.com" site_id="3018" lang="en" xmltv_id="BBCOne.uk@ChannelIslandsHD">BBC One CI HD</channel>
<channel site="sky.com" site_id="3006" lang="en" xmltv_id="BBCOne.uk@EastHD">BBC One EastHD</channel>
<channel site="sky.com" site_id="3005" lang="en" xmltv_id="BBCOne.uk@EastMidlandsHD">BBC One EMidHD</channel>
<channel site="sky.com" site_id="3000" lang="en" xmltv_id="BBCOne.uk@LondonHD">BBC One Lon HD</channel>
<channel site="sky.com" site_id="3009" lang="en" xmltv_id="BBCOne.uk@NorthEastCumbriaHD">BBC One NE HD</channel>
<channel site="sky.com" site_id="1098" lang="en" xmltv_id="BBCOne.uk@NorthernIrelandHD">BBC One NI HD</channel>
<channel site="sky.com" site_id="2081" lang="en" xmltv_id="BBCOne.uk@NorthernIrelandHD">BBC One NI HD</channel>
<channel site="sky.com" site_id="3007" lang="en" xmltv_id="BBCOne.uk@NorthWestHD">BBC One NW HD</channel>
<channel site="sky.com" site_id="2082" lang="en" xmltv_id="BBCOne.uk@ScotlandHD">BBC One ScotHD</channel>
<channel site="sky.com" site_id="3008" lang="en" xmltv_id="BBCOne.uk@SouthEastHD">BBC One SE HD</channel>
<channel site="sky.com" site_id="3011" lang="en" xmltv_id="BBCOne.uk@SouthHD">BBC One Sth HD</channel>
<channel site="sky.com" site_id="3014" lang="en" xmltv_id="BBCOne.uk@SouthWestHD">BBC One SW HD</channel>
<channel site="sky.com" site_id="2083" lang="en" xmltv_id="BBCOne.uk@WalesHD">BBC One Wal HD</channel>
<channel site="sky.com" site_id="3001" lang="en" xmltv_id="BBCOne.uk@WestHD">BBC One Wst HD</channel>
<channel site="sky.com" site_id="3003" lang="en" xmltv_id="BBCOne.uk@WestMidlandsHD">BBC One WM HD</channel>
<channel site="sky.com" site_id="3017" lang="en" xmltv_id="BBCOne.uk@YorkshireHD">BBC One Yks HD</channel>
<channel site="sky.com" site_id="3004" lang="en" xmltv_id="BBCOne.uk@YorkshireLincolnshireHD">BBC One Y&amp;L HD</channel>
<channel site="sky.com" site_id="3020" lang="en" xmltv_id="BBCParliament.uk@HD">BBC Parl HD</channel>
<channel site="sky.com" site_id="2053" lang="en" xmltv_id="BBCRedButton1.uk@HD">BBC RB 1 HD</channel>
<channel site="sky.com" site_id="1138" lang="en" xmltv_id="BBCScotland.uk@HD">BBCScotlandHD</channel>
<channel site="sky.com" site_id="2080" lang="en" xmltv_id="BBCThree.uk@HD">BBC Three HD</channel>
<channel site="sky.com" site_id="2075" lang="en" xmltv_id="BBCTwo.uk@HD">BBC Two HD</channel>
<channel site="sky.com" site_id="1135" lang="en" xmltv_id="BBCTwo.uk@NorthernIrelandHD">BBC Two NI HD</channel>
<channel site="sky.com" site_id="3019" lang="en" xmltv_id="BBCTwo.uk@NorthernIrelandHD">BBC Two NI HD</channel>
<channel site="sky.com" site_id="3015" lang="en" xmltv_id="BBCTwo.uk@WalesHD">BBC Two Wal HD</channel>
<channel site="sky.com" site_id="4100" lang="en" xmltv_id="BestDirect.uk@SD">Best Direct</channel>
<channel site="sky.com" site_id="1065" lang="en" xmltv_id="Blaze.uk@SD">BLAZE</channel>
<channel site="sky.com" site_id="1074" lang="en" xmltv_id="BloombergTV.us@Europe">Bloomberg HD</channel>
<channel site="sky.com" site_id="5603" lang="en" xmltv_id="Boomerang.uk@Plus1">Boomerang+1</channel>
<channel site="sky.com" site_id="5609" lang="en" xmltv_id="Boomerang.uk@SD">Boomerang</channel>
<channel site="sky.com" site_id="1371" lang="en" xmltv_id="Cartoonito.uk@SD">Cartoonito</channel>
<channel site="sky.com" site_id="4077" lang="en" xmltv_id="CartoonNetwork.uk@HD">Cartoon Net HD</channel>
<channel site="sky.com" site_id="5610" lang="en" xmltv_id="CartoonNetwork.uk@Plus1">CN+1</channel>
<channel site="sky.com" site_id="5601" lang="en" xmltv_id="CartoonNetwork.uk@SD">Cartoon Netwrk</channel>
<channel site="sky.com" site_id="2077" lang="en" xmltv_id="CBBC.ie@HD">CBBC HD</channel>
<channel site="sky.com" site_id="2078" lang="en" xmltv_id="CBBC.uk@HD">CBBC HD</channel>
<channel site="sky.com" site_id="2090" lang="en" xmltv_id="CBeebies.ie@HD">CBeebies HD</channel>
<channel site="sky.com" site_id="2088" lang="en" xmltv_id="CBeebies.uk@HD">CBeebies HD</channel>
<channel site="sky.com" site_id="3602" lang="en" xmltv_id="CBSReality.uk@Plus1">TRUE CRIME+1</channel>
<channel site="sky.com" site_id="2203" lang="en" xmltv_id="Challenge.ie@SD">Challenge</channel>
<channel site="sky.com" site_id="2202" lang="en" xmltv_id="Challenge.uk@SD">Challenge</channel>
<channel site="sky.com" site_id="1246" lang="en" xmltv_id="Channel4.uk@IrelandHD">Channel 4 HD</channel>
<channel site="sky.com" site_id="1250" lang="en" xmltv_id="Channel4.uk@IrelandHD">Channel 4 HD</channel>
<channel site="sky.com" site_id="1667" lang="en" xmltv_id="Channel4.uk@IrelandPlus1">Channel 4+1</channel>
<channel site="sky.com" site_id="1202" lang="en" xmltv_id="Channel4.uk@UKHD">Channel 4 HD</channel>
<channel site="sky.com" site_id="1213" lang="en" xmltv_id="Channel4.uk@UKHD">Channel 4 HD</channel>
<channel site="sky.com" site_id="1248" lang="en" xmltv_id="Channel4.uk@UKHD">Channel 4 HD</channel>
<channel site="sky.com" site_id="1249" lang="en" xmltv_id="Channel4.uk@UKHD">Channel 4 HD</channel>
<channel site="sky.com" site_id="4075" lang="en" xmltv_id="Channel4.uk@UKHD">Channel 4 HD</channel>
<channel site="sky.com" site_id="1670" lang="en" xmltv_id="Channel4.uk@UKPlus1">Channel 4+1</channel>
<channel site="sky.com" site_id="1671" lang="en" xmltv_id="Channel4.uk@UKPlus1">Channel 4+1</channel>
<channel site="sky.com" site_id="1673" lang="en" xmltv_id="Channel4.uk@UKPlus1">Channel 4+1</channel>
<channel site="sky.com" site_id="1675" lang="en" xmltv_id="Channel4.uk@UKPlus1">Channel 4+1</channel>
<channel site="sky.com" site_id="4058" lang="en" xmltv_id="Channel5.uk@HD">5 HD</channel>
<channel site="sky.com" site_id="1839" lang="en" xmltv_id="Channel5.uk@Plus1">5+1</channel>
<channel site="sky.com" site_id="5520" lang="en" xmltv_id="Channels24.ng@SD">Channels 24</channel>
<channel site="sky.com" site_id="3815" lang="en" xmltv_id="ChannelS.uk@SD">CHSTV</channel>
<channel site="sky.com" site_id="1850" lang="en" xmltv_id="ChlLineup.uk@SD">Chl Line-up</channel>
<channel site="sky.com" site_id="4505" lang="en" xmltv_id="ClublandTV.uk@SD">Clubland TV</channel>
<channel site="sky.com" site_id="1088" lang="en" xmltv_id="CNBCEurope.uk@SD">CNBC HD</channel>
<channel site="sky.com" site_id="1019" lang="en" xmltv_id="CNNInternational.us@MENA">CNN HD</channel>
<channel site="sky.com" site_id="3714" lang="en" xmltv_id="Colors.in@SD">COLORS</channel>
<channel site="sky.com" site_id="1105" lang="en" xmltv_id="ColorsCineplex.in@SD">ColorsCineplex</channel>
<channel site="sky.com" site_id="1090" lang="en" xmltv_id="ColorsGujarati.in@SD">ColorsGujarati</channel>
<channel site="sky.com" site_id="1372" lang="en" xmltv_id="ColorsMENA.in@HD">COLORS HD</channel>
<channel site="sky.com" site_id="3916" lang="en" xmltv_id="ColorsRishteyEurope.in@SD">ColorsRishtey</channel>
<channel site="sky.com" site_id="3705" lang="en" xmltv_id="ComedyCentral.ie@SD">ComedyCentral</channel>
<channel site="sky.com" site_id="4056" lang="en" xmltv_id="ComedyCentral.uk@HD">ComedyCentHD</channel>
<channel site="sky.com" site_id="3802" lang="en" xmltv_id="ComedyCentral.uk@Plus1">ComedyCent+1</channel>
<channel site="sky.com" site_id="2510" lang="en" xmltv_id="ComedyCentral.uk@SD">ComedyCentral</channel>
<channel site="sky.com" site_id="2709" lang="en" xmltv_id="ComedyCentralExtra.ie@SD">ComedyXtra</channel>
<channel site="sky.com" site_id="1813" lang="en" xmltv_id="ComedyCentralExtra.uk@SD">ComedyXtra</channel>
<channel site="sky.com" site_id="1207" lang="en" xmltv_id="CourtTV.uk@SD">Court TV</channel>
<channel site="sky.com" site_id="4088" lang="en" xmltv_id="CrimePlusInvestigation.uk@HD">Crime+Inv HD</channel>
<channel site="sky.com" site_id="3620" lang="en" xmltv_id="CrimePlusInvestigation.uk@Plus1">Crime+Inv+1</channel>
<channel site="sky.com" site_id="1448" lang="en" xmltv_id="CrimePlusInvestigation.uk@SD">Crime+Inv</channel>
<channel site="sky.com" site_id="1018" lang="en" xmltv_id="Cruise1stTV.uk@SD">Cruise1st.tv</channel>
<channel site="sky.com" site_id="1861" lang="en" xmltv_id="Cula4.ie@HD">Cúla4 HD</channel>
<channel site="sky.com" site_id="3078" lang="en" xmltv_id="Dave.ie@HD">U&amp;Dave HD</channel>
<channel site="sky.com" site_id="2376" lang="en" xmltv_id="Dave.ie@SD">U&amp;Dave</channel>
<channel site="sky.com" site_id="5541" lang="en" xmltv_id="DaystarTV.us@SD">DAYSTAR HD</channel>
<channel site="sky.com" site_id="1235" lang="en" xmltv_id="DeenTV.uk@SD">Deen TV</channel>
<channel site="sky.com" site_id="1370" lang="en" xmltv_id="DiscoveryChannel.uk@Ireland">Discovery</channel>
<channel site="sky.com" site_id="2401" lang="en" xmltv_id="DiscoveryChannel.uk@UK">Discovery</channel>
<channel site="sky.com" site_id="4003" lang="en" xmltv_id="DiscoveryChannel.uk@UKHD">Discovery HD</channel>
<channel site="sky.com" site_id="2404" lang="en" xmltv_id="DiscoveryChannel.uk@UKPlus1">Discovery+1</channel>
<channel site="sky.com" site_id="3760" lang="en" xmltv_id="DiscoveryHistory.uk@Plus1">Disc.History+1</channel>
<channel site="sky.com" site_id="2407" lang="en" xmltv_id="DiscoveryHistory.uk@SD">Disc.History</channel>
<channel site="sky.com" site_id="2406" lang="en" xmltv_id="DiscoveryScienceEurope.uk@UKHD">Disc.Science</channel>
<channel site="sky.com" site_id="1351" lang="en" xmltv_id="DiscoveryScienceEurope.uk@UKPlus1">Disc.Sci+1</channel>
<channel site="sky.com" site_id="5245" lang="en" xmltv_id="DiscoveryTurbo.uk@Plus1">Disc.Turbo+1</channel>
<channel site="sky.com" site_id="2409" lang="en" xmltv_id="DiscoveryTurbo.uk@SD">Disc.Turbo</channel>
<channel site="sky.com" site_id="4548" lang="en" xmltv_id="DMAX.uk@Ireland">DMAX</channel>
<channel site="sky.com" site_id="3618" lang="en" xmltv_id="DMAX.uk@UK">DMAX</channel>
<channel site="sky.com" site_id="1865" lang="en" xmltv_id="DMAX.uk@UKPlus1">DMAX+1</channel>
<channel site="sky.com" site_id="1189" lang="en" xmltv_id="DMNews.uk@SD">DM News English</channel>
<channel site="sky.com" site_id="2613" lang="en" xmltv_id="Drama.ie@SD">U&amp;Drama</channel>
<channel site="sky.com" site_id="1191" lang="en" xmltv_id="DunamisTV.ng@SD">Dunamis TV</channel>
<channel site="sky.com" site_id="1637" lang="en" xmltv_id="E4.ie@SD">E4</channel>
<channel site="sky.com" site_id="4076" lang="en" xmltv_id="E4.uk@HD">E4 HD</channel>
<channel site="sky.com" site_id="3300" lang="en" xmltv_id="E4.uk@Plus1">E4+1</channel>
<channel site="sky.com" site_id="1628" lang="en" xmltv_id="E4.uk@SD">E4</channel>
<channel site="sky.com" site_id="1200" lang="en" xmltv_id="E4Extra.uk@SD">E4 Extra</channel>
<channel site="sky.com" site_id="1758" lang="en" xmltv_id="E4Extra.uk@SD">E4 Extra</channel>
<channel site="sky.com" site_id="3111" lang="en" xmltv_id="EmanChannel.uk@SD">Eman Channel</channel>
<channel site="sky.com" site_id="4604" lang="en" xmltv_id="EuronewsEnglish.fr@SD">Euronews</channel>
<channel site="sky.com" site_id="3117" lang="en" xmltv_id="EWTN.us@English">EWTN Catholic</channel>
<channel site="sky.com" site_id="5354" lang="en" xmltv_id="FaithUK.uk@SD">Faith UK</channel>
<channel site="sky.com" site_id="4404" lang="en" xmltv_id="FaithWorldTV.uk@SD">Faith World TV</channel>
<channel site="sky.com" site_id="1073" lang="en" xmltv_id="Film4.ie@SD">Film4</channel>
<channel site="sky.com" site_id="4044" lang="en" xmltv_id="Film4.uk@HD">Film4 HD</channel>
<channel site="sky.com" site_id="1629" lang="en" xmltv_id="Film4.uk@Plus1">Film4+1</channel>
<channel site="sky.com" site_id="1627" lang="en" xmltv_id="Film4.uk@SD">Film4</channel>
<channel site="sky.com" site_id="5617" lang="en" xmltv_id="FoodNetwork.ie@SD">Food Network</channel>
<channel site="sky.com" site_id="3592" lang="en" xmltv_id="FoodNetwork.uk@Plus1">Food Netwrk+1</channel>
<channel site="sky.com" site_id="3590" lang="en" xmltv_id="FoodNetwork.uk@SD">Food Network</channel>
<channel site="sky.com" site_id="1121" lang="en" xmltv_id="France24.fr@English">FRANCE 24 HD</channel>
<channel site="sky.com" site_id="1196" lang="en" xmltv_id="GBNews.uk@SD">GB News HD</channel>
<channel site="sky.com" site_id="1042" lang="en" xmltv_id="GemsTV.uk@HD">Gemporia HD</channel>
<channel site="sky.com" site_id="4407" lang="en" xmltv_id="GeoNewsInternational.pk@SD">GEO News</channel>
<channel site="sky.com" site_id="4110" lang="en" xmltv_id="GeoUK.pk@SD">GEO TV</channel>
<channel site="sky.com" site_id="3105" lang="en" xmltv_id="GODTV.uk@SD">GOD Channel</channel>
<channel site="sky.com" site_id="3721" lang="en" xmltv_id="GREATaction.uk@Plus1">Great! Action+1</channel>
<channel site="sky.com" site_id="3708" lang="en" xmltv_id="GREATaction.uk@SD">Great! Action</channel>
<channel site="sky.com" site_id="1318" lang="en" xmltv_id="GREATmovies.uk@Ireland">Great! Mystery</channel>
<channel site="sky.com" site_id="3709" lang="en" xmltv_id="GREATmovies.uk@UK">Great! Mystery</channel>
<channel site="sky.com" site_id="3771" lang="en" xmltv_id="GREATmovies.uk@UKPlus1">G! Mystery+1</channel>
<channel site="sky.com" site_id="1133" lang="en" xmltv_id="GREATromance.uk@Ireland">Great! Action</channel>
<channel site="sky.com" site_id="3643" lang="en" xmltv_id="GREATromance.uk@UK">Great! Romance</channel>
<channel site="sky.com" site_id="3751" lang="en" xmltv_id="GREATromance.uk@UKPlus1">G! Romance+1</channel>
<channel site="sky.com" site_id="1320" lang="en" xmltv_id="GREATtv.ie@SD">Great! TV</channel>
<channel site="sky.com" site_id="5338" lang="en" xmltv_id="GREATtv.uk@Plus1">Great! TV+1</channel>
<channel site="sky.com" site_id="4266" lang="en" xmltv_id="GREATtv.uk@SD">Great! TV</channel>
<channel site="sky.com" site_id="2301" lang="en" xmltv_id="HGTV.uk@SD">HGTV</channel>
<channel site="sky.com" site_id="3580" lang="en" xmltv_id="HighStreetTV1.uk@SD">High Street TV 1</channel>
<channel site="sky.com" site_id="5706" lang="en" xmltv_id="HighStreetTV2.uk@SD">High Street TV 2</channel>
<channel site="sky.com" site_id="3404" lang="en" xmltv_id="HighStreetTV3.uk@SD">Shop Unlimited</channel>
<channel site="sky.com" site_id="1169" lang="en" xmltv_id="HobbyMaker.uk@HD">HobbyMakerHD</channel>
<channel site="sky.com" site_id="4502" lang="en" xmltv_id="HorrorXtra.uk@Plus1">LEGEND XTRA+1</channel>
<channel site="sky.com" site_id="3605" lang="en" xmltv_id="HorrorXtra.uk@SD">LEGEND XTRA</channel>
<channel site="sky.com" site_id="5205" lang="en" xmltv_id="HumEurope.pk@SD">HUM EUROPE</channel>
<channel site="sky.com" site_id="1101" lang="en" xmltv_id="IdealWorldTV.uk@HD">Ideal World HD</channel>
<channel site="sky.com" site_id="5452" lang="en" xmltv_id="InvestigationDiscovery.uk@Plus1">ID+1</channel>
<channel site="sky.com" site_id="2413" lang="en" xmltv_id="InvestigationDiscovery.uk@SD">ID</channel>
<channel site="sky.com" site_id="2418" lang="en" xmltv_id="InvestigationDiscovery.uk@SD">ID</channel>
<channel site="sky.com" site_id="4461" lang="en" xmltv_id="IonTV.uk@SD">iON TV</channel>
<channel site="sky.com" site_id="3914" lang="en" xmltv_id="IqraBangla.uk@SD">IQRA Bangla</channel>
<channel site="sky.com" site_id="6754" lang="en" xmltv_id="IqraTV.uk@SD">IQRA TV</channel>
<channel site="sky.com" site_id="3214" lang="en" xmltv_id="IslamChannel.uk@SD">Islam Channel</channel>
<channel site="sky.com" site_id="5211" lang="en" xmltv_id="IslamChannelUrdu.uk@SD">Islam Ch Urdu</channel>
<channel site="sky.com" site_id="4403" lang="en" xmltv_id="IslamTV.uk@SD">Islam TV</channel>
<channel site="sky.com" site_id="1217" lang="en" xmltv_id="ITV1.uk@AngliaHD">ITV1 HD</channel>
<channel site="sky.com" site_id="3063" lang="en" xmltv_id="ITV1.uk@BorderScotlandHD">ITV1 HD</channel>
<channel site="sky.com" site_id="6505" lang="en" xmltv_id="ITV1.uk@GranadaHD">ITV1 HD</channel>
<channel site="sky.com" site_id="1043" lang="en" xmltv_id="ITV1.uk@LondonHD">ITV1 HD</channel>
<channel site="sky.com" site_id="1044" lang="en" xmltv_id="ITV1.uk@LondonHD">ITV1 HD</channel>
<channel site="sky.com" site_id="1045" lang="en" xmltv_id="ITV1.uk@LondonHD">ITV1 HD</channel>
<channel site="sky.com" site_id="1061" lang="en" xmltv_id="ITV1.uk@LondonHD">ITV1 HD</channel>
<channel site="sky.com" site_id="1062" lang="en" xmltv_id="ITV1.uk@LondonHD">ITV1 HD</channel>
<channel site="sky.com" site_id="1063" lang="en" xmltv_id="ITV1.uk@LondonHD">ITV1 HD</channel>
<channel site="sky.com" site_id="1208" lang="en" xmltv_id="ITV1.uk@LondonHD">ITV1 HD</channel>
<channel site="sky.com" site_id="1209" lang="en" xmltv_id="ITV1.uk@LondonHD">ITV1 HD</channel>
<channel site="sky.com" site_id="1214" lang="en" xmltv_id="ITV1.uk@LondonHD">ITV1 HD</channel>
<channel site="sky.com" site_id="1219" lang="en" xmltv_id="ITV1.uk@LondonHD">ITV1 HD</channel>
<channel site="sky.com" site_id="3062" lang="en" xmltv_id="ITV1.uk@LondonHD">ITV1 HD</channel>
<channel site="sky.com" site_id="6503" lang="en" xmltv_id="ITV1.uk@LondonHD">ITV1 HD</channel>
<channel site="sky.com" site_id="6504" lang="en" xmltv_id="ITV1.uk@LondonHD">ITV1 HD</channel>
<channel site="sky.com" site_id="6145" lang="en" xmltv_id="ITV1.uk@LondonPlus1">ITV1+1</channel>
<channel site="sky.com" site_id="6155" lang="en" xmltv_id="ITV1.uk@LondonPlus1">ITV1+1</channel>
<channel site="sky.com" site_id="6355" lang="en" xmltv_id="ITV1.uk@LondonPlus1">ITV1+1</channel>
<channel site="sky.com" site_id="6365" lang="en" xmltv_id="ITV1.uk@LondonPlus1">ITV1+1</channel>
<channel site="sky.com" site_id="6502" lang="en" xmltv_id="ITV1.uk@MeridianHD">ITV1 HD</channel>
<channel site="sky.com" site_id="6501" lang="en" xmltv_id="ITV1.uk@WalesHD">ITV1 Wales HD</channel>
<channel site="sky.com" site_id="6532" lang="en" xmltv_id="ITV2.uk@HD">ITV2 HD</channel>
<channel site="sky.com" site_id="6241" lang="en" xmltv_id="ITV2.uk@Plus1">ITV2+1</channel>
<channel site="sky.com" site_id="6533" lang="en" xmltv_id="ITV3.uk@HD">ITV3 HD</channel>
<channel site="sky.com" site_id="6261" lang="en" xmltv_id="ITV3.uk@Plus1">ITV3+1</channel>
<channel site="sky.com" site_id="6534" lang="en" xmltv_id="ITV4.uk@HD">ITV4 HD</channel>
<channel site="sky.com" site_id="6274" lang="en" xmltv_id="ITV4.uk@Plus1">ITV4+1</channel>
<channel site="sky.com" site_id="3026" lang="en" xmltv_id="ITVBe.uk@HD">ITV Quiz HD</channel>
<channel site="sky.com" site_id="3354" lang="en" xmltv_id="JewelleryMaker.uk@SD">JewelleryMaker</channel>
<channel site="sky.com" site_id="3753" lang="en" xmltv_id="KanshiTV.uk@SD">Kanshi TV</channel>
<channel site="sky.com" site_id="3731" lang="en" xmltv_id="KWSMLD323.us@SD">NTD</channel>
<channel site="sky.com" site_id="4610" lang="en" xmltv_id="Legend.uk@SD">LEGEND</channel>
<channel site="sky.com" site_id="3845" lang="en" xmltv_id="LFCTV.uk@SD">LFCTV HD</channel>
<channel site="sky.com" site_id="1228" lang="en" xmltv_id="LoveWorldUK.ng@SD">LoveWorld HD</channel>
<channel site="sky.com" site_id="4460" lang="en" xmltv_id="MadaniChannelEnglish.pk@SD">Madani Chnl</channel>
<channel site="sky.com" site_id="1069" lang="en" xmltv_id="MasalaTV.pk@SD">HUM News</channel>
<channel site="sky.com" site_id="3401" lang="en" xmltv_id="MATVChannel.uk@SD">APNA MA TV</channel>
<channel site="sky.com" site_id="3360" lang="en" xmltv_id="More4.ie@SD">More4</channel>
<channel site="sky.com" site_id="4043" lang="en" xmltv_id="More4.uk@HD">More4 HD</channel>
<channel site="sky.com" site_id="3310" lang="en" xmltv_id="More4.uk@Plus1">More4+1</channel>
<channel site="sky.com" site_id="3340" lang="en" xmltv_id="More4.uk@SD">More4</channel>
<channel site="sky.com" site_id="4420" lang="en" xmltv_id="Movies24.uk@SD">Movies24</channel>
<channel site="sky.com" site_id="4421" lang="en" xmltv_id="Movies24Plus.uk@SD">Movies24+</channel>
<channel site="sky.com" site_id="3202" lang="en" xmltv_id="MTA1World.uk@HD">MTA1 World HD</channel>
<channel site="sky.com" site_id="2516" lang="en" xmltv_id="MTV.ie@SD">MTV</channel>
<channel site="sky.com" site_id="3831" lang="en" xmltv_id="MTV.uk@HD">MTV HD</channel>
<channel site="sky.com" site_id="2501" lang="en" xmltv_id="MTV.uk@SD">MTV</channel>
<channel site="sky.com" site_id="2508" lang="en" xmltv_id="MTVBase.uk@SD">MTV 90s</channel>
<channel site="sky.com" site_id="2506" lang="en" xmltv_id="MTVHits.uk@SD">Club MTV</channel>
<channel site="sky.com" site_id="1089" lang="en" xmltv_id="MustHaveIdeas.uk@HD">MstHveIdeasHD</channel>
<channel site="sky.com" site_id="1003" lang="en" xmltv_id="MUTV.uk@SD">MUTV HD</channel>
<channel site="sky.com" site_id="4031" lang="en" xmltv_id="NationalGeographic.uk@HD">Nat Geo HD</channel>
<channel site="sky.com" site_id="1822" lang="en" xmltv_id="NationalGeographic.uk@Plus1">Nat Geo+1</channel>
<channel site="sky.com" site_id="1806" lang="en" xmltv_id="NationalGeographic.uk@SD">Nat Geo</channel>
<channel site="sky.com" site_id="4025" lang="en" xmltv_id="NationalGeographicWild.uk@HD">NatGeoWild HD</channel>
<channel site="sky.com" site_id="1847" lang="en" xmltv_id="NationalGeographicWild.uk@SD">Nat Geo Wild</channel>
<channel site="sky.com" site_id="1821" lang="en" xmltv_id="NDTV24x7.in@SD">NDTV World</channel>
<channel site="sky.com" site_id="1026" lang="en" xmltv_id="NewVision.uk@SD">New Vision TV</channel>
<channel site="sky.com" site_id="3147" lang="en" xmltv_id="NHKWorldJapan.jp@SD">NHK World HD</channel>
<channel site="sky.com" site_id="2517" lang="en" xmltv_id="Nickelodeon.ie@SD">Nickelodeon</channel>
<channel site="sky.com" site_id="4069" lang="en" xmltv_id="Nickelodeon.uk@HD">NickelodeonHD</channel>
<channel site="sky.com" site_id="1845" lang="en" xmltv_id="Nickelodeon.uk@Plus1">Nickelodeon+1</channel>
<channel site="sky.com" site_id="1846" lang="en" xmltv_id="Nickelodeon.uk@SD">Nickelodeon</channel>
<channel site="sky.com" site_id="3356" lang="en" xmltv_id="NickJr.ie@SD">Nick Jr.</channel>
<channel site="sky.com" site_id="4039" lang="en" xmltv_id="NickJr.uk@HD">Nick Jr. HD</channel>
<channel site="sky.com" site_id="5089" lang="en" xmltv_id="NickJr.uk@Plus1">Nick Jr+1</channel>
<channel site="sky.com" site_id="1857" lang="en" xmltv_id="NickJr.uk@SD">Nick Jr.</channel>
<channel site="sky.com" site_id="5192" lang="en" xmltv_id="NickJrToo.ie@SD">Nick Jr. Too</channel>
<channel site="sky.com" site_id="4340" lang="en" xmltv_id="NickJrToo.uk@SD">Nick Jr. Too</channel>
<channel site="sky.com" site_id="5527" lang="en" xmltv_id="Nicktoons.ie@SD">Nicktoons</channel>
<channel site="sky.com" site_id="1849" lang="en" xmltv_id="Nicktoons.uk@SD">Nicktoons</channel>
<channel site="sky.com" site_id="3715" lang="en" xmltv_id="NoorTV.uk@SD">Noor TV</channel>
<channel site="sky.com" site_id="3403" lang="en" xmltv_id="Now70s.uk@SD">NOW 70s</channel>
<channel site="sky.com" site_id="4541" lang="en" xmltv_id="Now80s.uk@SD">NOW 80s</channel>
<channel site="sky.com" site_id="1103" lang="en" xmltv_id="Now90s00s.uk@Poland">NOW 90s &amp; 00s</channel>
<channel site="sky.com" site_id="3682" lang="en" xmltv_id="NOWRock.uk@SD">NOW ROCK</channel>
<channel site="sky.com" site_id="4540" lang="en" xmltv_id="NTVEurope.bd@SD">NTV</channel>
<channel site="sky.com" site_id="1257" lang="en" xmltv_id="OireachtasTV.ie@SD">Oireachtas TV</channel>
<channel site="sky.com" site_id="1041" lang="en" xmltv_id="PanjabTV.uk@SD">Panjab TV</channel>
<channel site="sky.com" site_id="1011" lang="en" xmltv_id="PBC.uk@SD">PBC</channel>
<channel site="sky.com" site_id="5500" lang="en" xmltv_id="PBSAmerica.uk@SD">PBS America</channel>
<channel site="sky.com" site_id="1140" lang="en" xmltv_id="PhoenixCNEChannel.hk@HD">PCNE Chinese HD</channel>
<channel site="sky.com" site_id="1260" lang="en" xmltv_id="Pitaara.in@SD">Pitaara</channel>
<channel site="sky.com" site_id="3421" lang="en" xmltv_id="PoliticsPunjab.uk@SD">PoliticsPunjab</channel>
<channel site="sky.com" site_id="1289" lang="en" xmltv_id="PremierSports1.ie@HD">Premier 1 HD</channel>
<channel site="sky.com" site_id="1633" lang="en" xmltv_id="PremierSports1.ie@HD">Premier 1 HD</channel>
<channel site="sky.com" site_id="1290" lang="en" xmltv_id="PremierSports2.ie@HD">Premier 2 HD</channel>
<channel site="sky.com" site_id="1635" lang="en" xmltv_id="PremierSports2.ie@HD">Premier 2 HD</channel>
<channel site="sky.com" site_id="5715" lang="en" xmltv_id="PTCPunjabi.in@SD">PTC PUNJABI</channel>
<channel site="sky.com" site_id="1128" lang="en" xmltv_id="Quest.uk@HD">QUEST HD</channel>
<channel site="sky.com" site_id="1130" lang="en" xmltv_id="Quest.uk@HD">QUEST HD</channel>
<channel site="sky.com" site_id="3621" lang="en" xmltv_id="Quest.uk@Plus1">QUEST+1</channel>
<channel site="sky.com" site_id="2410" lang="en" xmltv_id="QuestRed.ie@SD">Quest Red</channel>
<channel site="sky.com" site_id="4547" lang="en" xmltv_id="QuestRed.uk@Plus1">Quest Red+1</channel>
<channel site="sky.com" site_id="2411" lang="en" xmltv_id="QuestRed.uk@SD">Quest Red</channel>
<channel site="sky.com" site_id="1076" lang="en" xmltv_id="QVC.uk@HD">QVC HD</channel>
<channel site="sky.com" site_id="4105" lang="en" xmltv_id="QVCBeauty.uk@SD">QVC Beauty</channel>
<channel site="sky.com" site_id="3359" lang="en" xmltv_id="QVCExtra.uk@SD">QVC Extra</channel>
<channel site="sky.com" site_id="1118" lang="en" xmltv_id="QVCStyle.uk@HD">QVC Style HD</channel>
<channel site="sky.com" site_id="5272" lang="en" xmltv_id="RacingTV.uk@HD">Racing TV HD</channel>
<channel site="sky.com" site_id="3617" lang="en" xmltv_id="RealityXtra.uk@SD">TRUE CRIME X</channel>
<channel site="sky.com" site_id="2324" lang="en" xmltv_id="Really.ie@SD">Really</channel>
<channel site="sky.com" site_id="2325" lang="en" xmltv_id="Really.uk@SD">Really</channel>
<channel site="sky.com" site_id="3116" lang="en" xmltv_id="RevelationTV.uk@SD">revelation</channel>
<channel site="sky.com" site_id="1030" lang="en" xmltv_id="RewindTV.uk@SD">Rewind TV</channel>
<channel site="sky.com" site_id="1270" lang="en" xmltv_id="RTE2.ie@HD">RTÉ2 HD</channel>
<channel site="sky.com" site_id="1158" lang="en" xmltv_id="RTE2.ie@Plus1">RTÉ2+1</channel>
<channel site="sky.com" site_id="1256" lang="en" xmltv_id="RTEjr.ie@SD">RTÉ KIDSjr</channel>
<channel site="sky.com" site_id="2804" lang="en" xmltv_id="RTENews.ie@SD">RTÉ News</channel>
<channel site="sky.com" site_id="2816" lang="en" xmltv_id="RTEOne.ie@HD">RTÉ One HD</channel>
<channel site="sky.com" site_id="2808" lang="en" xmltv_id="RTEOne.ie@Plus1">RTÉ One+1</channel>
<channel site="sky.com" site_id="2296" lang="en" xmltv_id="S4C.uk@HD">S4C HD</channel>
<channel site="sky.com" site_id="5701" lang="en" xmltv_id="S4C.uk@SD">S4C</channel>
<channel site="sky.com" site_id="3355" lang="en" xmltv_id="SangatTV.uk@SD">Sangat</channel>
<channel site="sky.com" site_id="1100" lang="en" xmltv_id="SanskarTV.in@SD">Sanskar</channel>
<channel site="sky.com" site_id="3650" lang="en" xmltv_id="SikhChannel.uk@SD">Sikh Channel</channel>
<channel site="sky.com" site_id="4063" lang="en" xmltv_id="SkyArts.uk@HD">Sky Arts HD</channel>
<channel site="sky.com" site_id="1752" lang="en" xmltv_id="SkyArts.uk@SD">Sky Arts</channel>
<channel site="sky.com" site_id="1414" lang="en" xmltv_id="SkyAtlantic.ie@SD">Sky Atlantic</channel>
<channel site="sky.com" site_id="4053" lang="en" xmltv_id="SkyAtlantic.uk@HD">Sky Atlantic HD</channel>
<channel site="sky.com" site_id="1413" lang="en" xmltv_id="SkyAtlantic.uk@Plus1">Sky Atlantic+1</channel>
<channel site="sky.com" site_id="1412" lang="en" xmltv_id="SkyAtlantic.uk@SD">Sky Atlantic</channel>
<channel site="sky.com" site_id="4014" lang="en" xmltv_id="SkyCinemaAction.uk@HD">Sky Action HD</channel>
<channel site="sky.com" site_id="4019" lang="en" xmltv_id="SkyCinemaComedy.uk@HD">Sky Comedy HD</channel>
<channel site="sky.com" site_id="4016" lang="en" xmltv_id="SkyCinemaDrama.uk@HD">Sky Drama HD</channel>
<channel site="sky.com" site_id="4018" lang="en" xmltv_id="SkyCinemaFamily.uk@HD">Sky Family HD</channel>
<channel site="sky.com" site_id="4015" lang="en" xmltv_id="SkyCinemaGreats.uk@SD">Sky Greats HD</channel>
<channel site="sky.com" site_id="4033" lang="en" xmltv_id="SkyCinemaHits.uk@SD">SkyAnimationHD</channel>
<channel site="sky.com" site_id="4021" lang="en" xmltv_id="SkyCinemaPremiere.uk@HD">SkyPremiereHD</channel>
<channel site="sky.com" site_id="4017" lang="en" xmltv_id="SkyCinemaSciFiHorror.uk@HD">Sky ScFi/HorHD</channel>
<channel site="sky.com" site_id="4020" lang="en" xmltv_id="SkyCinemaSelect.uk@SD">SkyDirectorsHD</channel>
<channel site="sky.com" site_id="4062" lang="en" xmltv_id="SkyCinemaThriller.uk@HD">Sky Thriller HD</channel>
<channel site="sky.com" site_id="1146" lang="en" xmltv_id="SkyComedy.ie@SD">Sky Comedy</channel>
<channel site="sky.com" site_id="1143" lang="en" xmltv_id="SkyComedy.uk@HD">Sky Comedy HD</channel>
<channel site="sky.com" site_id="1177" lang="en" xmltv_id="SkyComedy.uk@SD">Sky Comedy</channel>
<channel site="sky.com" site_id="3012" lang="en" xmltv_id="SkyCrime.ie@HD">Sky Crime HD</channel>
<channel site="sky.com" site_id="1056" lang="en" xmltv_id="SkyCrime.ie@SD">Sky Crime</channel>
<channel site="sky.com" site_id="1212" lang="en" xmltv_id="SkyCrime.uk@HD">Sky Crime HD</channel>
<channel site="sky.com" site_id="4330" lang="en" xmltv_id="SkyCrime.uk@Plus1">Sky Crime+1</channel>
<channel site="sky.com" site_id="2207" lang="en" xmltv_id="SkyCrime.uk@SD">Sky Crime</channel>
<channel site="sky.com" site_id="1230" lang="en" xmltv_id="SkyDocumentaries.ie@SD">SkyDocumntrs</channel>
<channel site="sky.com" site_id="1136" lang="en" xmltv_id="SkyDocumentaries.uk@HD">SkyDocmntrsHD</channel>
<channel site="sky.com" site_id="1127" lang="en" xmltv_id="SkyDocumentaries.uk@SD">SkyDocumntrs</channel>
<channel site="sky.com" site_id="1879" lang="en" xmltv_id="SkyHistory2.uk@SD">Sky History2</channel>
<channel site="sky.com" site_id="4086" lang="en" xmltv_id="SkyHistory.uk@HD">Sky HistoryHD</channel>
<channel site="sky.com" site_id="1875" lang="en" xmltv_id="SkyHistory.uk@SD">Sky History</channel>
<channel site="sky.com" site_id="1147" lang="en" xmltv_id="SkyKids.uk@HD">Sky Kids HD</channel>
<channel site="sky.com" site_id="1401" lang="en" xmltv_id="SkyMax.ie@SD">Sky One</channel>
<channel site="sky.com" site_id="4061" lang="en" xmltv_id="SkyMax.uk@HD">Sky One HD</channel>
<channel site="sky.com" site_id="1402" lang="en" xmltv_id="SkyMax.uk@SD">Sky One</channel>
<channel site="sky.com" site_id="3052" lang="en" xmltv_id="SkyMix.ie@HD">Sky Mix HD</channel>
<channel site="sky.com" site_id="1831" lang="en" xmltv_id="SkyMix.uk@HD">Sky Mix HD</channel>
<channel site="sky.com" site_id="1165" lang="en" xmltv_id="SkyNature.uk@HD">Sky Nature HD</channel>
<channel site="sky.com" site_id="1194" lang="en" xmltv_id="SkyNature.uk@SD">Sky Nature</channel>
<channel site="sky.com" site_id="4054" lang="en" xmltv_id="SkyNews.ie@HD">Sky News HD</channel>
<channel site="sky.com" site_id="1406" lang="en" xmltv_id="SkyNews.ie@SD">Sky News</channel>
<channel site="sky.com" site_id="4050" lang="en" xmltv_id="SkyNews.uk@HD">Sky News HD</channel>
<channel site="sky.com" site_id="1404" lang="en" xmltv_id="SkyNews.uk@SD">Sky News</channel>
<channel site="sky.com" site_id="4645" lang="en" xmltv_id="SkyNewsArabia.ae@SD">SkyNewsArabia</channel>
<channel site="sky.com" site_id="4074" lang="en" xmltv_id="SkySciFi.uk@HD">Sky Sci-Fi HD</channel>
<channel site="sky.com" site_id="2505" lang="en" xmltv_id="SkySciFi.uk@SD">Sky Sci-Fi</channel>
<channel site="sky.com" site_id="1277" lang="en" xmltv_id="SkyShowcase.uk@Plus1">SkyShowcase+1</channel>
<channel site="sky.com" site_id="3839" lang="en" xmltv_id="SkySportsArena.ie@SD">SkySp+</channel>
<channel site="sky.com" site_id="3940" lang="en" xmltv_id="SkySportsArena.uk@HD">SkySp+ HD</channel>
<channel site="sky.com" site_id="1302" lang="en" xmltv_id="SkySportsCricket.ie@SD">SkySp Cricket</channel>
<channel site="sky.com" site_id="4081" lang="en" xmltv_id="SkySportsCricket.uk@HD">SkySpCricket HD</channel>
<channel site="sky.com" site_id="1306" lang="en" xmltv_id="SkySportsF1.ie@SD">SkySp F1</channel>
<channel site="sky.com" site_id="3835" lang="en" xmltv_id="SkySportsF1.uk@HD">SkySp F1 HD</channel>
<channel site="sky.com" site_id="3840" lang="en" xmltv_id="SkySportsFootball.ie@SD">SkySp F&apos;ball</channel>
<channel site="sky.com" site_id="3939" lang="en" xmltv_id="SkySportsFootball.uk@HD">SkySp F&apos;ball HD</channel>
<channel site="sky.com" site_id="3049" lang="en" xmltv_id="SkySportsGolf.ie@HD">SkySp Golf HD</channel>
<channel site="sky.com" site_id="1324" lang="en" xmltv_id="SkySportsGolf.ie@SD">SkySp Golf</channel>
<channel site="sky.com" site_id="4026" lang="en" xmltv_id="SkySportsGolf.uk@HD">SkySp Golf HD</channel>
<channel site="sky.com" site_id="4007" lang="en" xmltv_id="SkySportsMainEvent.ie@HD">SkySpMainEvHD</channel>
<channel site="sky.com" site_id="1309" lang="en" xmltv_id="SkySportsMainEvent.ie@SD">SkySpMainEv</channel>
<channel site="sky.com" site_id="4002" lang="en" xmltv_id="SkySportsMainEvent.uk@HD">SkySpMainEvHD</channel>
<channel site="sky.com" site_id="4090" lang="en" xmltv_id="SkySportsMix.uk@HD">SkySp Mix HD</channel>
<channel site="sky.com" site_id="4091" lang="en" xmltv_id="SkySportsMix.uk@SD">SkySp Mix</channel>
<channel site="sky.com" site_id="4035" lang="en" xmltv_id="SkySportsNews.ie@HD">SkySp News HD</channel>
<channel site="sky.com" site_id="1319" lang="en" xmltv_id="SkySportsNews.ie@SD">SkySp News</channel>
<channel site="sky.com" site_id="4049" lang="en" xmltv_id="SkySportsNews.uk@HD">SkySp News HD</channel>
<channel site="sky.com" site_id="1314" lang="en" xmltv_id="SkySportsNews.uk@SD">SkySp News</channel>
<channel site="sky.com" site_id="1333" lang="en" xmltv_id="SkySportsNFL.ie@SD">SkySp Action</channel>
<channel site="sky.com" site_id="4022" lang="en" xmltv_id="SkySportsNFL.uk@HD">SkySp ActionHD</channel>
<channel site="sky.com" site_id="1010" lang="en" xmltv_id="SkySportsPremierLeague.ie@HD">SkySp PL HD</channel>
<channel site="sky.com" site_id="1312" lang="en" xmltv_id="SkySportsPremierLeague.ie@SD">SkySp PL</channel>
<channel site="sky.com" site_id="4010" lang="en" xmltv_id="SkySportsPremierLeague.uk@HD">SkySp PL HD</channel>
<channel site="sky.com" site_id="4037" lang="en" xmltv_id="SkySportsRacing.uk@IrelandHD">SkySp Racing HD</channel>
<channel site="sky.com" site_id="4032" lang="en" xmltv_id="SkySportsRacing.uk@UKHD">SkySp Racing HD</channel>
<channel site="sky.com" site_id="1285" lang="en" xmltv_id="SkySportsTennis.ie@SD">SkySp Tennis</channel>
<channel site="sky.com" site_id="1284" lang="en" xmltv_id="SkySportsTennis.uk@SD">SkySp Tennis HD</channel>
<channel site="sky.com" site_id="3051" lang="en" xmltv_id="SkyWitness.ie@HD">Sky Witness HD</channel>
<channel site="sky.com" site_id="4334" lang="en" xmltv_id="SkyWitness.ie@SD">Sky Witness</channel>
<channel site="sky.com" site_id="4066" lang="en" xmltv_id="SkyWitness.uk@HD">Sky Witness HD</channel>
<channel site="sky.com" site_id="2205" lang="en" xmltv_id="SkyWitness.uk@Plus1">Sky Witness+1</channel>
<channel site="sky.com" site_id="2201" lang="en" xmltv_id="SkyWitness.uk@SD">Sky Witness</channel>
<channel site="sky.com" site_id="4045" lang="en" xmltv_id="SonyEntertainmentTelevisionAsia.in@HD">SONY TV HD</channel>
<channel site="sky.com" site_id="2601" lang="en" xmltv_id="SonyEntertainmentTelevisionAsia.in@SD">SONY TV</channel>
<channel site="sky.com" site_id="5431" lang="en" xmltv_id="SonyMax2.in@SD">SONY MAX 2</channel>
<channel site="sky.com" site_id="4046" lang="en" xmltv_id="SonyMax.uk@HD">SONY MAX HD</channel>
<channel site="sky.com" site_id="2603" lang="en" xmltv_id="SonyMax.uk@SD">SONY MAX</channel>
<channel site="sky.com" site_id="3631" lang="en" xmltv_id="SonySABAsia.in@SD">SONY SAB</channel>
<channel site="sky.com" site_id="1167" lang="en" xmltv_id="STV.uk@HD">STV HD</channel>
<channel site="sky.com" site_id="1168" lang="en" xmltv_id="STV.uk@HD">STV HD</channel>
<channel site="sky.com" site_id="1170" lang="en" xmltv_id="STV.uk@HD">STV HD</channel>
<channel site="sky.com" site_id="4055" lang="en" xmltv_id="STV.uk@HD">STV HD</channel>
<channel site="sky.com" site_id="6210" lang="en" xmltv_id="STV.uk@SD">STV</channel>
<channel site="sky.com" site_id="6371" lang="en" xmltv_id="STV.uk@SD">STV</channel>
<channel site="sky.com" site_id="4408" lang="en" xmltv_id="TakbeerTV.uk@SD">Takbeer TV</channel>
<channel site="sky.com" site_id="5252" lang="en" xmltv_id="TalkingPicturesTV.uk@SD">TalkingPictures</channel>
<channel site="sky.com" site_id="3109" lang="en" xmltv_id="TBNUK.uk@SD">TBN UK</channel>
<channel site="sky.com" site_id="4192" lang="en" xmltv_id="TelevisionX.uk@SD">Television X</channel>
<channel site="sky.com" site_id="4034" lang="en" xmltv_id="TG4.ie@HD">TG4 HD</channel>
<channel site="sky.com" site_id="1017" lang="en" xmltv_id="ThatsTV.uk@SD">That&apos;s TV</channel>
<channel site="sky.com" site_id="1234" lang="en" xmltv_id="TinyPop.uk@SD">Tiny Pop</channel>
<channel site="sky.com" site_id="1113" lang="en" xmltv_id="TJC.uk@HD">TJC HD</channel>
<channel site="sky.com" site_id="2405" lang="en" xmltv_id="TLC.ie@SD">TLC</channel>
<channel site="sky.com" site_id="3812" lang="en" xmltv_id="TLC.uk@HD">TLC HD</channel>
<channel site="sky.com" site_id="5451" lang="en" xmltv_id="TLC.uk@Plus1">TLC+1</channel>
<channel site="sky.com" site_id="5450" lang="en" xmltv_id="TLC.uk@SD">TLC</channel>
<channel site="sky.com" site_id="1120" lang="en" xmltv_id="TNTSports1.uk@HD">TNTSports1 HD</channel>
<channel site="sky.com" site_id="3625" lang="en" xmltv_id="TNTSports1.uk@HD">TNTSports1 HD</channel>
<channel site="sky.com" site_id="3661" lang="en" xmltv_id="TNTSports1.uk@SD">TNT Sports 1</channel>
<channel site="sky.com" site_id="3627" lang="en" xmltv_id="TNTSports2.uk@HD">TNTSports2 HD</channel>
<channel site="sky.com" site_id="3663" lang="en" xmltv_id="TNTSports2.uk@SD">TNT Sports 2</channel>
<channel site="sky.com" site_id="3629" lang="en" xmltv_id="TNTSports3.uk@HD">TNTSports3 HD</channel>
<channel site="sky.com" site_id="5032" lang="en" xmltv_id="TNTSports3.uk@SD">TNT Sports 3</channel>
<channel site="sky.com" site_id="4040" lang="en" xmltv_id="TNTSports4.uk@HD">TNTSports4 HD</channel>
<channel site="sky.com" site_id="3141" lang="en" xmltv_id="TNTSports4.uk@SD">TNT Sports 4</channel>
<channel site="sky.com" site_id="1099" lang="en" xmltv_id="TNTSportsBoxOffice2.uk@HD">TNTSBoxOff2HD</channel>
<channel site="sky.com" site_id="1210" lang="en" xmltv_id="TNTSportsBoxOffice.uk@HD">TNTSBoxOffHD</channel>
<channel site="sky.com" site_id="1872" lang="en" xmltv_id="TogetherTV.uk@SD">Together</channel>
<channel site="sky.com" site_id="1226" lang="en" xmltv_id="Travelxp.in@SD">Travelxp</channel>
<channel site="sky.com" site_id="5237" lang="en" xmltv_id="TRTWorld.tr@HD">TRT World HD</channel>
<channel site="sky.com" site_id="5071" lang="en" xmltv_id="TRTWorld.tr@SD">TRT World</channel>
<channel site="sky.com" site_id="1142" lang="en" xmltv_id="TrueCrime.uk@SD">TRUE CRIME</channel>
<channel site="sky.com" site_id="3352" lang="en" xmltv_id="TrueCrime.uk@SD">TRUE CRIME</channel>
<channel site="sky.com" site_id="1232" lang="en" xmltv_id="TrueCrimeXtra.uk@SD">TRUE CRIME X</channel>
<channel site="sky.com" site_id="5882" lang="en" xmltv_id="TVCNews.ng@SD">TVC News</channel>
<channel site="sky.com" site_id="5426" lang="en" xmltv_id="TVOne.uk@SD">TV One</channel>
<channel site="sky.com" site_id="3632" lang="en" xmltv_id="TVWarehouse.uk@SD">TV Warehouse</channel>
<channel site="sky.com" site_id="3825" lang="en" xmltv_id="UAlibi.uk@HD">U&amp;Alibi HD</channel>
<channel site="sky.com" site_id="2630" lang="en" xmltv_id="UAlibi.uk@Plus1">U&amp;Alibi+1</channel>
<channel site="sky.com" site_id="2303" lang="en" xmltv_id="UAlibi.uk@SD">U&amp;Alibi</channel>
<channel site="sky.com" site_id="3809" lang="en" xmltv_id="UDave.uk@HD">U&amp;Dave HD</channel>
<channel site="sky.com" site_id="2306" lang="en" xmltv_id="UDave.uk@SD">U&amp;Dave</channel>
<channel site="sky.com" site_id="2320" lang="en" xmltv_id="UDaveJaVu.uk@SD">U&amp;DaveJaVu</channel>
<channel site="sky.com" site_id="1081" lang="en" xmltv_id="UDrama.uk@Plus1">U&amp;Drama+1</channel>
<channel site="sky.com" site_id="2612" lang="en" xmltv_id="UDrama.uk@SD">U&amp;Drama</channel>
<channel site="sky.com" site_id="2307" lang="en" xmltv_id="UEden.uk@Plus1">U&amp;Eden+1</channel>
<channel site="sky.com" site_id="2302" lang="en" xmltv_id="UEden.uk@SD">U&amp;Eden</channel>
<channel site="sky.com" site_id="6513" lang="en" xmltv_id="UGold.uk@HD">U&amp;Gold HD</channel>
<channel site="sky.com" site_id="2703" lang="en" xmltv_id="UGold.uk@Plus1">U&amp;Gold+1</channel>
<channel site="sky.com" site_id="2304" lang="en" xmltv_id="UGold.uk@SD">U&amp;Gold</channel>
<channel site="sky.com" site_id="2365" lang="en" xmltv_id="UGold.uk@SD">U&amp;Gold</channel>
<channel site="sky.com" site_id="3608" lang="en" xmltv_id="UtsavBharat.uk@SD">Utsav Bharat</channel>
<channel site="sky.com" site_id="4047" lang="en" xmltv_id="UtsavGold.in@HD">Utsav Gold HD</channel>
<channel site="sky.com" site_id="3613" lang="en" xmltv_id="UtsavGold.in@SD">Utsav Gold</channel>
<channel site="sky.com" site_id="5300" lang="en" xmltv_id="UtsavPlus.uk@HD">Utsav Plus HD</channel>
<channel site="sky.com" site_id="1771" lang="en" xmltv_id="UtsavPlus.uk@SD">Utsav Plus</channel>
<channel site="sky.com" site_id="6510" lang="en" xmltv_id="UTV.uk@HD">UTV HD</channel>
<channel site="sky.com" site_id="2616" lang="en" xmltv_id="UW.uk@Plus1">U&amp;W+1</channel>
<channel site="sky.com" site_id="2617" lang="en" xmltv_id="UW.uk@SD">U&amp;W</channel>
<channel site="sky.com" site_id="2615" lang="en" xmltv_id="UYesterday.uk@Plus1">U&amp;Yesterday+1</channel>
<channel site="sky.com" site_id="2305" lang="en" xmltv_id="UYesterday.uk@SD">U&amp;Yesterday</channel>
<channel site="sky.com" site_id="1316" lang="en" xmltv_id="VirginMediaFour.ie@HD">Virgin Four HD</channel>
<channel site="sky.com" site_id="3881" lang="en" xmltv_id="VirginMediaOne.ie@HD">Virgin One HD</channel>
<channel site="sky.com" site_id="1025" lang="en" xmltv_id="VirginMediaOne.ie@Plus1">Virgin One+1</channel>
<channel site="sky.com" site_id="2817" lang="en" xmltv_id="VirginMediaThree.ie@SD">Virgin Three</channel>
<channel site="sky.com" site_id="1046" lang="en" xmltv_id="VirginMediaTwo.ie@HD">Virgin Two HD</channel>
<channel site="sky.com" site_id="5880" lang="en" xmltv_id="W.ie@SD">U&amp;W</channel>
<channel site="sky.com" site_id="4191" lang="en" xmltv_id="XpandedTV.uk@SD">Xpanded TV</channel>
<channel site="sky.com" site_id="1029" lang="en" xmltv_id="XXXGirlGirl.uk@SD">XXX Girl Girl</channel>
<channel site="sky.com" site_id="2608" lang="en" xmltv_id="ZeeCinema.in@SD">Zee Cinema</channel>
<channel site="sky.com" site_id="1188" lang="en" xmltv_id="ZeePunjabi.in@SD">Zee Punjabi</channel>
<channel site="sky.com" site_id="1016" lang="en" xmltv_id="ZeeTVUK.uk@HD">Zee TV HD</channel>
<channel site="sky.com" site_id="2607" lang="en" xmltv_id="ZeeTVUK.uk@SD">Zee TV</channel>
</channels>
@@ -0,0 +1,32 @@
---
services:
iptv-org-epg:
container_name: iptv-org-epg
image: ghcr.io/knylbyte/epg:latest
restart: unless-stopped
security_opt:
- apparmor=docker-default
networks:
- proxy-net
expose:
- 3000
volumes:
- ./data:/epg/public
# If you want to use your own channel list instead of SITE,
# create a local ./channels.xml and activate the line below.
# - ./channels.xml:/epg/public/channels.xml:ro
environment:
TZ: Europe/Paris # time zone for correct scheduling
CRON_SCHEDULE: "0 0,12 * * *" # daily 12:00 a.m.
RUN_AT_STARTUP: true # execute once directly at startup
MAX_CONNECTIONS: 1 # performance/output options (supported by the grabber)
GZIP: false # additionally generate guide.xml.gz if "true"
DAYS: 7 # overwrite number of days
CURL: false # output requests as curl
TIMEOUT: 30000 # request-Timeout (ms)
FILL_GAPS: true # fill gaps in the EPG data
networks:
proxy-net:
external: true
name: proxy-net
@@ -27,21 +27,21 @@ tcp:
gluetun-http-proxy:
loadBalancer:
servers:
- address: "gluetun-01:1080"
- address: "gluetun:1080"
# - address: "gluetun-02:1080" # optional second gluetun instance, but does not work right now because traefik does not support sticking of TCP connections -> https://traefik.io/glossary/what-are-sticky-sessions
# - address: "gluetun-03:1080" # optional third gluetun instance, but does not work right now because traefik does not support sticking of TCP connections -> https://traefik.io/glossary/what-are-sticky-sessions
socks5h-tcp:
loadbalancer:
servers:
- address: "gluetun-01:1388"
- address: "gluetun:1388"
# - address: "gluetun-02:1388" # optional second gluetun instance, but does not work right now because traefik does not support sticking of TCP connections -> https://traefik.io/glossary/what-are-sticky-sessions
# - address: "gluetun-03:1388" # optional third gluetun instance, but does not work right now because traefik does not support sticking of TCP connections -> https://traefik.io/glossary/what-are-sticky-sessions
shadowsocks-tcp:
loadBalancer:
servers:
- address: "gluetun-01:9388"
- address: "gluetun:9388"
# - address: "gluetun-02:9388" # optional second gluetun instance, but does not work right now because traefik does not support sticking of TCP connections -> https://traefik.io/glossary/what-are-sticky-sessions
# - address: "gluetun-03:9388" # optional third gluetun instance, but does not work right now because traefik does not support sticking of TCP connections -> https://traefik.io/glossary/what-are-sticky-sessions
@@ -59,13 +59,13 @@ udp:
socks5h-udp:
loadbalancer:
servers:
- address: "gluetun-01:1388"
- address: "gluetun:1388"
# - address: "gluetun-02:1388" # optional second gluetun instance, but does not work right now because traefik does not support sticking of TCP connections -> https://traefik.io/glossary/what-are-sticky-sessions
# - address: "gluetun-03:1388" # optional third gluetun instance, but does not work right now because traefik does not support sticking of TCP connections -> https://traefik.io/glossary/what-are-sticky-sessions
shadowsocks-udp:
loadBalancer:
servers:
- address: "gluetun-01:9388"
- address: "gluetun:9388"
# - address: "gluetun-02:9388" # optional second gluetun instance, but does not work right now because traefik does not support sticking of TCP connections -> https://traefik.io/glossary/what-are-sticky-sessions
# - address: "gluetun-03:9388" # optional third gluetun instance, but does not work right now because traefik does not support sticking of TCP connections -> https://traefik.io/glossary/what-are-sticky-sessions
@@ -1,3 +1,4 @@
---
api:
dashboard: true
debug: false
@@ -5,7 +5,7 @@ services:
traefik:
image: traefik:latest
container_name: traefik
restart: on-failure
restart: unless-stopped
security_opt:
- apparmor=docker-default # security_opts are optional
secrets:
@@ -2,7 +2,7 @@ services:
tuliprox:
container_name: tuliprox
image: ghcr.io/euzu/tuliprox:latest
restart: on-failure
restart: unless-stopped
networks:
- proxy-net
expose:
+2 -2
View File
@@ -325,7 +325,7 @@ and CrowdSec protection.
2. **Gluetun (VPN & Proxy Sidecar):**
Provide your Wireguard details in `gluetun-01/.env.wg-01` and set a user/pass in `.env.socks5-proxy`. Once started (
Provide your Wireguard details in `gluetun/.env.wg` and set a user/pass in `gluetun/.env.socks5-proxy`. Once started (
`docker-compose up -d`), it
securely routes all traffic attached to its network through the VPN.
@@ -335,7 +335,7 @@ and CrowdSec protection.
```yaml
proxy:
url: socks5://socks5-01:1388
url: socks5://gluetun:1388
username: "<socks5-proxy-user>"
password: "<socks5-proxy-password>"
```
@@ -0,0 +1,12 @@
---
name: local/tuliprox-cover-parser-whitelist
description: Ignore expected Tuliprox Xtream image fetches before scenarios
filter: 'evt.Meta.log_type == "http_access-log"'
whitelist:
reason: "Ignore expected Tuliprox 4xx/5xx Xtream image GETs"
expression:
- >
evt.Meta.traefik_router_name in ["tuliprox@docker", "tuliprox-secure@docker"] &&
evt.Meta.http_verb == "GET" &&
evt.Meta.http_status matches "^[45][0-9][0-9]$" &&
evt.Meta.http_path matches "^(/[^/?#]+)*/resource/(live/[^/]+/[^/]+/[0-9]+/(logo|logo_small)|movie/[^/]+/[^/]+/[0-9]+/(logo|logo_small|nfo_cover_big|nfo_movie_image|nfo_backdrop_path_[0-9]+)|series/[^/]+/[^/]+/[0-9]+/(logo|logo_small|cover|backdrop_path_[0-9]+|nfo_s_[0-9]+_(cover|cover_tmdb|cover_big)|nfo_ep_[0-9]+_[0-9]+_movie_image))$"
+27 -5
View File
@@ -212,13 +212,15 @@ In the repository under `docker/container-templates/`, you will find ready-to-us
### Components of the Stack
1. **Traefik (Reverse Proxy):** Handles incoming port 443 traffic, auto-renews Let's Encrypt certificates (via Cloudflare DNS-01 challenge), and
1. **Traefik (Reverse Proxy Ingress):** Handles incoming port 443 traffic, auto-renews Let's Encrypt certificates (via Cloudflare DNS-01 challenge), and
applies strict Content-Security-Policy headers.
2. **Gluetun (VPN Egress):** A WireGuard/OpenVPN client container. It connects to Mullvad/ProtonVPN. We attach a **Socks5 Sidecar** to its network
namespace. Tuliprox can then be configured to route its upstream provider requests through this Socks5 proxy, completely hiding your server's IP
2. **Gluetun (VPN Egress):** A WireGuard/OpenVPN client container. It connects e.g. to Mullvad or Proton VPN.
Tuliprox can then be configured to route its upstream provider requests through this Socks5 proxy, completely hiding your server's IP
from the IPTV provider.
3. **CrowdSec (WAF & Bouncer):** Analyzes Traefik access logs in real-time. If someone tries to brute-force your Tuliprox Web UI or run
path-traversal attacks, CrowdSec instructs the Traefik Bouncer plugin to drop their IP at the edge.
4. **IPTV-org-epg (EPG guide):** Generates a local XMLTV guide for the selected channels and makes it available to
Tuliprox.
### How to wire it up
@@ -230,7 +232,7 @@ docker network create crowdsec-net
```
**2. Configure Gluetun & Socks5:**
In `container-templates/gluetun/gluetun-01/.env.wg-01`, add your Wireguard details.
In `container-templates/gluetun/.env.wg`, add your Wireguard details.
In `container-templates/gluetun/.env.socks5-proxy`, set user/pass for the proxy.
Start it: `docker-compose up -d`. It exposes port 1388 internally.
@@ -239,7 +241,7 @@ In your `config.yml`, point the global proxy setting to the Socks5 container:
```yaml
proxy:
url: socks5://socks5-01:1388
url: socks5://gluetun:1388
username: "<socks5-proxy-user>"
password: "<socks5-proxy-password>"
```
@@ -263,3 +265,23 @@ In your Tuliprox `docker-compose.yml`, add the Traefik labels to route traffic s
This architecture ensures your IPTV provider only sees the VPN IP, your clients only see your secure `tv.yourdomain.com` domain, and malicious
bots are blocked instantly by CrowdSec before they even reach the Rust backend.
>**⚠️ Important:** make sure you add
>[tuliprox-cover-whitelist.yaml](../../docker/container-templates/crowdsec/crowdsec/config/parsers/s02-enrich/tuliprox-cover-whitelist.yaml)
> to `crowdsec/config/parsers/s02-enrich/tuliprox-cover-whitelist.yaml` in your Crowdsec instance.
> Otherwise, you could quickly end up banning yourself.
**5. Configure IPTV-org-epg:**
Copy the desired channel entries from the IPTV-org `sites` files to
`container-templates/iptv-org/data/channels.xml`. For every channel, `xmltv_id` must exactly match the
corresponding `@epg_channel_id` in Tuliprox. For example, `xmltv_id="BBCOne.uk@LondonHD"` matches
`@epg_channel_id = "BBCOne.uk@LondonHD"`. If necessary, adjust `xmltv_id` in `channels.xml` or set the corresponding
`@epg_channel_id` in `mapping.yml`.
Start it: `docker-compose up -d`. Add the generated guide to the corresponding input in your `source.yml`:
```yaml
epg:
sources:
- url: http://iptv-org-epg:3000/guide.xml
```