Skip to content

Technicolor TG799Vac: A deep dive by wuseman

Welcome to my in-depth README for the TG799Vac Xtream v3, a comprehensive document crafted through extensive reverse engineering and ethical hacking. This guide is the culmination of my personal efforts and contains a wealth of knowledge, including custom scripts, detailed tutorials, and unique insights into the router's functionalities.

Disclaimer

This README is a personal document created solely based on my experiences and expertise. It is important to note that I do not guarantee the accuracy or reliability of the information provided. The procedures and methods described herein reflect my individual approach and may not necessarily be applicable or safe for all users or systems. Anyone choosing to follow the instructions or use the information provided does so at their own risk. I cannot be held responsible for any consequences, damages, or losses resulting from the use of this guide.

Purpose

The primary goal of this document is to serve as a personal repository of knowledge for my own reference. However, it's crafted with the utmost care and attention to detail, making it a professional and serious guide for those with a deep interest in understanding or modifying the TG799Vac.

While this README remains private and is intended for my use, it is structured to meet high standards of clarity and professionalism, should it be shared with select individuals.

Copy/Paste video - Flashing VDNT-O

Screenshot

Dangerous: This will overwrite bank_1 and bank_2

#!/usr/bin/env bash

# - iNFO -------------------------------------------------
#
#   Author....: wuseman <wuseman@nr1.nu>
#  Created....: 2023-12-16 (23:10:05)
#  License....: MIT
#
# --------------------------------------------------------

get_first_line_hex() {
    hexdump -C /dev/mtd3 -n 100 | head -n 1
}

echo "Checking initial state..."
initial_hex=$(get_first_line_hex)
echo "Initial: $initial_hex"

echo "Starting dd command..."
dd if=/dev/urandom of=/dev/mtd3 &
DD_PID=$!
sleep 3
kill $DD_PID
echo "dd command completed."

echo "Checking final state..."
final_hex=$(get_first_line_hex)
echo "Final: $final_hex"

if [ "$initial_hex" != "$final_hex" ]; then
    echo -e "[\e[1;32m*\e[0m] - /dev/mtd3 been successfully overwritten.."
else
    echo -e "[\e[1;31m*\e[0m] - /dev/mtd3 has not been overwritten, exiting.."
    exit
fi
  • Overwrite bank_2 with random data for 3 seconds
#!/usr/bin/env bash

# - iNFO -------------------------------------------------
#
#   Author....: wuseman <wuseman@nr1.nu>
#  Created....: 2023-12-16 (23:10:05)
#  License....: MIT
#
# --------------------------------------------------------

get_first_line_hex() {
    hexdump -C /dev/mtd4 -n 100 | head -n 1
}

echo "Checking initial state..."
initial_hex=$(get_first_line_hex)
echo "Initial: $initial_hex"

echo "Starting dd command..."
dd if=/dev/urandom of=/dev/mtd4 &
DD_PID=$!
sleep 3
kill $DD_PID
echo "dd command completed."

echo "Checking final state..."
final_hex=$(get_first_line_hex)
echo "Final: $final_hex"

if [ "$initial_hex" != "$final_hex" ]; then
    echo -e "[\e[1;32m*\e[0m] - /dev/mtd4 been successfully overwritten.."
else
    echo -e "[\e[1;31m*\e[0m] - /dev/mtd4 has not been overwritten, exiting.."
    exit
fi

Wipe /overlay/* directories

rm -rf /overlay/*

Preserve Root Access

mkdir -p /overlay/$(cat /proc/banktable/booted)/etc
chmod 755 /overlay/$(cat /proc/banktable/booted) /overlay/$(cat /proc/banktable/booted)/etc
echo -e "echo root:root | chpasswd
sed -i 's#/root:.*\$#/root:/bin/ash#' /etc/passwd
sed -i -e 's/#//' -e 's#askconsole:.*\$#askconsole:/bin/ash#' /etc/inittab
uci -q set \$(uci show firewall | grep -m 1 \$(fw3 -q print | \
egrep 'iptables -t filter -A zone_lan_input -p tcp -m tcp --dport 22 -m comment --comment \"!fw3: .+\" -j DROP' | \
sed -n -e 's/^iptables.\+fw3: \(.\+\)\".\+/\1/p') | \
sed -n -e \"s/\(.\+\).name='.\+'$/\1/p\").target='ACCEPT'
uci add dropbear dropbear
uci rename dropbear.@dropbear[-1]=afg
uci set dropbear.afg.enable='1'
uci set dropbear.afg.Interface='lan'
uci set dropbear.afg.Port='22'
uci set dropbear.afg.IdleTimeout='600'
uci set dropbear.afg.PasswordAuth='on'
uci set dropbear.afg.RootPasswordAuth='on'
uci set dropbear.afg.RootLogin='1'
uci set dropbear.lan.enable='0'
uci set web.usr_Administrator.role='superuser'
uci commit web
uci commit dropbear
uci set system.@system[0].log_host='192.168.1.100'
uci set system.@system[0].log_port='514'
uci set system.@system[0].conloglevel='5'
uci set system.@coredump[0].reboot='1'
uci commit system
uci set upnpd.config.log_output='1'
uci commit upnpd
uci set clash.engineer.ssh='1'
uci set clash.engineer.telnet='1'
uci set clash.engineer.serial='1'
sed -i 's/^/#/g' /etc/dropbear/authorized_keys
uci set cwmpd.cwmpd_config.state='0'
uci commit cwmpd
uci set system.cfg01e48a.network_timezone='0'
uci set system.cfg01e48a.log_filter_ip='192.168.1.64'
uci set system.cfg01e48a.log_port='514'
uci set system.cfg01e48a.log_buffer_size='64'
uci set system.cfg01e48a.log_size='1024'
uci set system.cfg01e48a.log_file='/etc/log/messages'
uci set system.cfg01e48a.hw_reboot_count='1'
uci set system.cfg01e48a.sw_reboot_count='1'
uci set system.cfg01e48a.log_host='192.168.1.66'
uci set system.cfg01e48a.conloglevel='0'
uci commit system 
/etc/init.d/dropbear enable
/etc/init.d/dropbear restart
rm /overlay/\$(cat /proc/banktable/booted)/etc/rc.local
source /rom/etc/rc.local
" > /overlay/$(cat /proc/banktable/booted)/etc/rc.local
chmod +x /overlay/$(cat /proc/banktable/booted)/etc/rc.local
sync
mkdir -p /overlay/$(cat /proc/banktable/notbooted)/etc
chmod 755 /overlay/$(cat /proc/banktable/notbooted) /overlay/$(cat /proc/banktable/notbooted)/etc
echo -e "echo root:root | chpasswd
sed -i 's#/root:.*\$#/root:/bin/ash#' /etc/passwd
sed -i -e 's/#//' -e 's#askconsole:.*\$#askconsole:/bin/ash#' /etc/inittab
uci -q set \$(uci show firewall | grep -m 1 \$(fw3 -q print | \
egrep 'iptables -t filter -A zone_lan_input -p tcp -m tcp --dport 22 -m comment --comment \"!fw3: .+\" -j DROP' | \
sed -n -e 's/^iptables.\+fw3: \(.\+\)\".\+/\1/p') | \
sed -n -e \"s/\(.\+\).name='.\+'$/\1/p\").target='ACCEPT'
uci add dropbear dropbear
uci rename dropbear.@dropbear[-1]=afg
uci set dropbear.afg.enable='1'
uci set dropbear.afg.Interface='lan'
uci set dropbear.afg.Port='22'
uci set dropbear.afg.IdleTimeout='600'
uci set dropbear.afg.PasswordAuth='on'
uci set dropbear.afg.RootPasswordAuth='on'
uci set dropbear.afg.RootLogin='1'
uci set dropbear.lan.enable='0'
uci set web.usr_Administrator.role='superuser'
uci commit web
uci commit dropbear
uci set system.@system[0].log_host='192.168.1.100'
uci set system.@system[0].log_port='514'
uci set system.@system[0].conloglevel='5'
uci set system.@coredump[0].reboot='1'
uci commit system
uci set upnpd.config.log_output='1'
uci commit upnpd
uci set clash.engineer.ssh='1'
uci set clash.engineer.telnet='1'
uci set clash.engineer.serial='1'
sed -i 's/^/#/g' /etc/dropbear/authorized_keys
uci set cwmpd.cwmpd_config.state='0'
uci commit cwmpd
uci set system.cfg01e48a.network_timezone='1'
uci set system.cfg01e48a.log_filter_ip='192.168.1.66'
uci set system.cfg01e48a.log_port='514'
uci set system.cfg01e48a.log_buffer_size='64'
uci set system.cfg01e48a.log_size='1024'
uci set system.cfg01e48a.log_file='/etc/log/messages'
uci set system.cfg01e48a.hw_reboot_count='1'
uci set system.cfg01e48a.sw_reboot_count='1'
uci set system.cfg01e48a.log_host='192.168.1.66'
uci set system.cfg01e48a.conloglevel='5'
uci commit system 
/etc/init.d/dropbear enable
/etc/init.d/dropbear restart
rm /overlay/\$(cat /proc/banktable/notbooted)/etc/rc.local
source /rom/etc/rc.local
" > /overlay/$(cat /proc/banktable/notbooted)/etc/rc.local
chmod +x /overlay/$(cat /proc/banktable/notbooted)/etc/rc.local
sync

Download firmware and create a raw binary file

cat "VBNT-H-2024-08.23.rbi" | (bli_parser && echo "Please wait..." && (bli_unseal | dd bs=4 skip=1 seek=1 of="../binary-rom/VBNT-H-2024-08.23.rbi"))
magic_value: BLI2
fim: 23
fia: Z8
prodid: 0
varid: 0
version: 0.0.0.0
data_offset: 379
data_size: 26825386
timestamp: 0x2BDE44A7
boardname: VBNT-H
prodname: Technicolor TG799vac Xtream
varname: TG799vac Xtream
tagparserversion: 200
flashaddress: 0x2000000
Please wait...

Write firmware to Bank_1 and Bank_2

#!/usr/bin/env bash

# - iNFO --------------------------------------
#
#   Author: wuseman <wuseman@nr1.nu>
#  Created: 2024-02-26 (04:51:26)
#  License: MIT
#
# ---------------------------------------------

# Mount drive if needed
if ! grep -q sda /proc/mounts; then 
    echo "Mounting /dev/sda1"; 
    mount /dev/sda1 /mnt/
fi

# Define variables for the firmware file and its path
firmware_path="/mnt/technicolor/vdnt-o/binary-rom"
firmware_file="VDNT-O.bin"
full_firmware_path="${firmware_path}/${firmware_file}"

# Assign the currently booted partition to a variable
not_booted_partition=$(cat /proc/banktable/notbooted)

# Check if the variable is not empty and the firmware file exists
if [ -n "$not_booted_partition" ] && [ -f "$full_firmware_path" ]; then
    # Write the firmware to the booted partition
    /sbin/mtd -e "$not_booted_partition" write "$full_firmware_path" "$not_booted_partition"
else
    echo "Error: Non-booted partition is not set or firmware file does not exist."
fi
#!/usr/bin/env bash

# - iNFO --------------------------------------
#
#   Author: wuseman <wuseman@nr1.nu>
#  Created: 2024-02-26 (04:51:26)
#  License: MIT
#
# ---------------------------------------------

# Mount drive if needed
if ! grep -q sda /proc/mounts; then 
    echo "Mounting /dev/sda1"; 
    mount /dev/sda1 /mnt/
fi

# Define variables for the firmware file and its path
firmware_path="/mnt/technicolor/vdnt-o/binary-rom"
firmware_file="VDNT-O.bin"
full_firmware_path="${firmware_path}/${firmware_file}"

# Assign the currently booted partition to a variable
not_booted_partition=$(cat /proc/banktable/notbooted)

# Check if the variable is not empty and the firmware file exists
if [ -n "$not_booted_partition" ] && [ -f "$full_firmware_path" ]; then
    # Write the firmware to the booted partition
    /sbin/mtd -e "$not_booted_partition" write "$full_firmware_path" "$not_booted_partition"
else
    echo "Error: Non-booted partition is not set or firmware file does not exist."
fi

Send Crash SysResq command for reboot

echo c > /proc/sysrq-trigger

That's it! If you have followed this guide, you have now successfully upgraded your router to the latest firmware for both banks, and root access belongs to you.

Configure Router After First Boot

Connect to router

sshpass -p root root@192.168.1.1

Replace /etc/dropber/authorized_keys with our own key

  • This will remove the access for the backdoor or support backdoor from the provider (who is the provider anyway?)
vi /etc/dropbear/authorized_keys
  • Add your ssh key

Configure the local ~/.ssh/config for the router

cat << "EOF" >> ~/.ssh/config
Host 192.168.1.1
  user root
  Hostname 192.168.1.1
  IdentityFile ~/.ssh/router/id_rsa
  KexAlgorithms +diffie-hellman-group1-sha1
  PreferredAuthentications publickey,password
  HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,ssh-rsa
  PubkeyAcceptedKeyTypes +ssh-rsa
  MACs hmac-sha1,hmac-md5
EOF

This command changes all occurrences of false to true for the specified patterns

find /www -type f -exec grep -iE 'canAdd = false|canApply = false|canEdit = false|canRemove = false|canDelete = false' {} +

# Previously I used below
## find /www -type f -exec grep -i 'canAdd = false' {} \;
## find /www -type f -exec grep -i 'canApply = false' {} \;
## find /www -type f -exec grep -i 'canEdit = false' {} \;
## find /www -type f -exec grep -i 'canRemove = false' {} \;
## find /www -type f -exec grep -i 'canDelete = false' {} \;

Warning: Important Notes

This command changes all occurrences of false to true for the specified patterns, regardless of the surrounding context. Ensure this is what you intend, as it may have significant effects on the behavior of your application. Always back up your files or test the command on a subset of files before running it across your entire /www directory, to prevent unintended changes. The -i flag for sed will edit your files in place, so consider using -i.bak instead to keep a backup of the original files.

find /www -type f -exec sed -i -E 's/(canAdd = |canApply = |canEdit = |canRemove = |canDelete = )false/\1true/gi' {} +
find /www -type f -exec sed -i.bak -E 's/(canAdd = |canApply = |canEdit = |canRemove = |canDelete = )false/\1true/gi' {} +

Grep Method with Diff: Search and Replace in /www/modal (Dry Run)

This example demonstrates using the grep method along with diff to search through all files in /www/modal, replacing occurrences of "engineer" with "superuser" and previewing changes without actually modifying the files.

find /www -type f -exec grep -l 'engineer' {} \; | while read -r file; do
    echo "Previewing changes for $file:"
    # Create a temporary 'before' file
    grep 'engineer' "$file" > /tmp/before.txt
    # Create a temporary 'after' file by performing the substitution
    sed 's/engineer/superuser/g' "$file" | grep 'superuser' > /tmp/after.txt
    # Show lines that will be removed (exist in 'before' but not in 'after')
    echo "Will be removed (or changed):"
    grep -v -x -F -f /tmp/after.txt /tmp/before.txt
    # Show lines that will be added (exist in 'after' but not in 'before')
    echo "Will be added (or changed to):"
    grep -v -x -F -f /tmp/before.txt /tmp/after.txt
    echo "--------------------------------"
done

# Cleanup temporary files
rm /tmp/before.txt /tmp/after.txt

Search and Replace Without: Dry Run

This example demonstrates how to search through all files in /www and replace occurrences of "engineer" with "superuser" without performing a dry run.

find /www -type f -exec grep -l 'engineer' {} + | while IFS= read -r file; do
    echo "Previewing changes for $file:"
    grep 'engineer' "$file"
    sed -i 's/engineer/superuser/g' "$file"
    echo "Changes applied to $file"
    echo "--------------------------------"
done

Search and Replace with Diff Method: Dry Run

This example demonstrates how to perform a dry run of the search and replace operation, using the diff method to preview changes, without actually modifying the files.

find /www -type f -exec grep -l 'engineer' {} + | while IFS= read -r file; do
    echo "Previewing changes for $file:"
    # Display the file name
    grep 'engineer' "$file" > /dev/null
    # Perform the replacement and compare with the original file side by side
    sed 's/engineer/superuser/g' "$file" | diff -y "$file" -
    echo "--------------------------------"
done

Add superuser and admin to engineering roles

#!/bin/sh

# Define roles to add
roles="superuser admin"

# Define modules
modules="web.systemmodal web.natalghelper web.xdsllowmodal"

# Add roles to modules
for role in $roles; do
    for module in $modules; do
        uci add_list "$module.roles='$role'"
    done
done

OpenWRT Package Manager

  • Delete distfeeds.conf
rm /etc/opkg/distfeeds.conf > /dev/null
  • Update customfeeds.conf with correct repo sources
cat << "EOF" > /etc/opkg/customfeeds.conf
src/gz chaos_calmer_base http://archive.openwrt.org/chaos_calmer/15.05.1/brcm63xx/generic/packages/base
src/gz chaos_calmer_packages http://archive.openwrt.org/chaos_calmer/15.05.1/brcm63xx/generic/packages/packages
src/gz chaos_calmer_luci http://archive.openwrt.org/chaos_calmer/15.05.1/brcm63xx/generic/packages/luci
src/gz chaos_calmer_routing http://archive.openwrt.org/chaos_calmer/15.05.1/brcm63xx/generic/packages/routing
src/gz chaos_calmer_telephony http://archive.openwrt.org/chaos_calmer/15.05.1/brcm63xx/generic/packages/telephony
src/gz chaos_calmer_management http://archive.openwrt.org/chaos_calmer/15.05.1/brcm63xx/generic/packages/management
EOF
  • Update /etc/opkg.conf for board vdnt-o specifik"
cat << "EOF" > /etc/opkg.conf
arch all 1
arch all 100
arch noarch 1
arch brcm63xx 3
arch brcm63xx-tch 10
arch brcm63xx 200
arch brcm63xx-tch 300
dest root /
dest ram /tmp
lists_dir ext /var/opkg-lists
option overlay_root /overlay
EOF
  • Install important packages
opkg update
opkg install bash coreutils dropbearconvert nmap procps nano vim-full \
openssh-keygen openssh-client openssh-sftp-server ssh-keys sshfs 

Add PS1 prompt for bash

echo 'export PS1="\[\033]0;\u@\h:\w\007\]\[\033[01;31m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\] "' > /root/.bashrc
. /root/.bashrc

Create Backup for mtd Partitions with Block Device Names

#!/bin/bash

# Create directory for backups
mkdir -p /mnt/sda/vdnt-o_2023/mtd

# Mount external storage
mount /dev/sda /mnt/sda/vdnt-o_2023

# Create backups of mtd partitions
dd if=/dev/mtd0 of=/mnt/sda/vdnt-o_2023/mtd/mtd0_brcmnand.0
dd if=/dev/mtd1 of=/mnt/sda/vdnt-o_2023/mtd/mtd1_rootfs.img
dd if=/dev/mtd2 of=/mnt/sda/vdnt-o_2023/mtd/mtd2_userfs.img
dd if=/dev/mtd3 of=/mnt/sda/vdnt-o_2023/mtd/mtd3_bank_1.img
dd if=/dev/mtd4 of=/mnt/sda/vdnt-o_2023/mtd/mtd4_bank_2.img
dd if=/dev/mtd5 of=/mnt/sda/vdnt-o_2023/mtd/mtd5_eripv2.img
dd if=/dev/mtd6 of=/mnt/sda/vdnt-o_2023/mtd/mtd6_rawstorage.img
dd if=/dev/mtd7 of=/mnt/sda/vdnt-o_2023/mtd/mtd7_blversion.img

Create Backup for mtdblock Partitions with Block Device Names

#!/bin/bash

# Create directory for backups
mkdir -p /mnt/sda/vdnt-o_2023/mtdblock

# Mount external storage
mount /dev/sda /mnt/sda/vdnt-o_2023

# Create backups of mtd partitions
dd if=/dev/mtd0 of=/mnt/sda/vdnt-o_2023/mtdblock/mtd0_brcmnand.0
dd if=/dev/mtd1 of=/mnt/sda/vdnt-o_2023/mtdblock/mtd1_rootfs.img
dd if=/dev/mtd2 of=/mnt/sda/vdnt-o_2023/mtdblock/mtd2_userfs.img
dd if=/dev/mtd3 of=/mnt/sda/vdnt-o_2023/mtdblock/mtd3_bank_1.img
dd if=/dev/mtd4 of=/mnt/sda/vdnt-o_2023/mtdblock/mtd4_bank_2.img
dd if=/dev/mtd5 of=/mnt/sda/vdnt-o_2023/mtdblock/mtd5_eripv2.img
dd if=/dev/mtd6 of=/mnt/sda/vdnt-o_2023/mtdblock/mtd6_rawstorage.img
dd if=/dev/mtd7 of=/mnt/sda/vdnt-o_2023/mtdblock/mtd7_blversion.img

Preserve Upgrade and SSH Access

Preserve Upgrade and SSH Access

mkdir -p /overlay/$(cat /proc/banktable/booted)/etc
chmod 755 /overlay/$(cat /proc/banktable/booted) /overlay/$(cat /proc/banktable/booted)/etc
echo -e "echo root:root | chpasswd
sed -i 's#/root:.*\$#/root:/bin/ash#' /etc/passwd
sed -i -e 's/#//' -e 's#askconsole:.*\$#askconsole:/bin/ash#' /etc/inittab
uci -q set \$(uci show firewall | grep -m 1 \$(fw3 -q print | \
egrep 'iptables -t filter -A zone_lan_input -p tcp -m tcp --dport 22 -m comment --comment \"!fw3: .+\" -j DROP' | \
sed -n -e 's/^iptables.\+fw3: \(.\+\)\".\+/\1/p') | \
sed -n -e \"s/\(.\+\).name='.\+'$/\1/p\").target='ACCEPT'
uci add dropbear dropbear
uci rename dropbear.@dropbear[-1]=afg
uci set dropbear.afg.enable='1'
uci set dropbear.afg.Interface='lan'
uci set dropbear.afg.Port='22'
uci set dropbear.afg.IdleTimeout='600'
uci set dropbear.afg.PasswordAuth='on'
uci set dropbear.afg.RootPasswordAuth='on'
uci set dropbear.afg.RootLogin='1'
uci set dropbear.lan.enable='0'
uci commit dropbear
/etc/init.d/dropbear enable
/etc/init.d/dropbear restart
rm /overlay/\$(cat /proc/banktable/booted)/etc/rc.local
source /rom/etc/rc.local
" > /overlay/$(cat /proc/banktable/booted)/etc/rc.local
chmod +x /overlay/$(cat /proc/banktable/booted)/etc/rc.local
sync
mtd -e $(cat /proc/banktable/booted) write "VDNT-O.bin" $(cat /proc/banktable/booted)
echo c > /proc/sysrq-trigger

Default Configuration

cat /proc/mtd

dev:    size   erasesize  name
mtd0: 08000000 00020000 "brcmnand.0"
mtd1: 02300000 00020000 "rootfs"
mtd2: 01f80000 00020000 "userfs"
mtd3: 02b00000 00020000 "bank_1"
mtd4: 02b00000 00020000 "bank_2"
mtd5: 00020000 00020000 "eripv2"
mtd6: 00040000 00020000 "rawstorage"
mtd7: 00000003 00020000 "blversion"

cat: /etc/config/dropbear

config dropbear 'mgmt'
        option PasswordAuth 'off'
        option RootPasswordAuth 'on'
        option Port '22'
        option Interface 'mgmt'
        option AllowedClientIPs '131.116.22.242/32 81.227.117.202/32 81.227.117.198/32 81.227.117.87/32 81.236.57.82/32'
        option enable '1'
        option IdleTimeout '3600'

config dropbear 'wan'
        option PasswordAuth 'off'
        option RootPasswordAuth 'on'
        option Port '60022'
        option Interface 'wan'
        option AllowedClientIPs '131.116.22.242/32 81.227.117.202/32 81.227.117.198/32 81.227.117.87/32 81.236.57.82/32'
        option enable '1'
        option IdleTimeout '3600'

config dropbear 'lan'
        option PasswordAuth 'on'
        option RootPasswordAuth 'on'
        option Port '60022'
        option Interface 'lan'
        option enable '0'
        option IdleTimeout '3600'

config dropbear 'afg'
        option enable '1'
        option Interface 'lan'
        option Port '22'
        option IdleTimeout '600'
        option PasswordAuth 'on'
        option RootPasswordAuth 'on'
        option RootLogin '1'

cat: /etc/dropbear/authorized_keys

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAgEA3VhXDw8oxKLUEctSKFaqNHHMbo59nBYXuvLaciQyIijk2B78v6t5LNkbZTCpjSIZZkCxcXh/L+Dyib0NJQ1E1dv5932prZfVz+ooXTYxkkJ0Ri9fmRKIiwDOrxYyYmNzglvKYNRcnC7M6RN6z4gU8ND8F3IO2WMtysJrXKQxZEahpN5UEVxi0KmjMM9NObEp0PT04PAZ3PYbgtodehpbboz65j8T/DzCT21j8Ns6BGe9wva1+S/G+3vUDERMhyV9/Ermlec+EwEqnjq7jl/pG/3tUH99RNyD6AuhmOQXJQRfFE3VcQV+tfSVz30gJHvhiH5kCIPFnU12iEYgjqZfZlb9ICCmeW2H59itjbuOGCF2Yi2q87JldMaoluVqQ5LKo/zjY4Vsed2elbExtEtVn8+iTSVXjx/ZqOPLIv5+2qQu3whTmuZJv3Q+4nBb08spoj6EWOiSMpVvuyUeO7JNYy1XBA7IGROrHC/kVdkAmJdXFB4PexVZTF60cTbrBizGVzzverlUdmSFvFlO+6TjFzwfIWg3eC6QpBaW5vnqZilSxqDrk5cPhV89R2vYdWjgKdMleWsk28DRVO8rIs+HArVR4FmKCxFd8SdFmmXfOXrQxfDJb3HbFayEnUc4GVdHIR34gt5L+Ku/8BeuRLxC2/1Wfz1dZeubw1+gpME03BM= TeliaCompany RGW key v2

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAgEA3e+i7L313ZRKP1BTU+wSlInCuwjR6iCmwiKD9aVdmGPwYcXwwBS33iWdjOxsGrLjbQZR1j9p95c4RpsgHJHTc3VreMDV2du3xMTGgQ4CMlm+L5NqY0Cw3zXYz7+Q194Oymd6L1GMqcfObkCwqmQaHWEFGImDHymnSlzo2Q3qZSzwRpSELhd64CTeAhbLDpWKyNPL36DHwFaqN2mJs/iLsR2EyxMd0oy3RZUjTg4XH2gbEQnGpxiEP45egkL0z8zOTXASWc1oZvF4hLCnns9osVIIHT0GvpZPRK9yGqJyky/ZvsVrceNKQ3OVYz4TVrVFBZ/WeE0UvyYHBEWw+gmkBFFkImJe2ZPYyKstdIzmt1OZzS7WbOIr8bi1iPOQ0FPsGR/5wqNQ7dk8+xHVtJh4Tw+vqpPZsglFy+edJFEGOO4TdLeJoI/ChdvBvESe9LJ71iId2eCeHs2252ibzR+zVd8kWKdjJVawFnY4aXt6cFMqmWvR9vuzK43wQKFb2A+c9tDvTICXPymu9h28bmpJ2/Ce9LsmOhh5zBxKAo38/D36+1S7651Aa07vC2v6pYyC2NDV/gihQAzIsBWd3wlbKIGgfsreCCUupDYRTAQC4tmzZ8szY5ulGtI6vbnNtlMIhBCwHFJ+KX2dm9KugSSLe6eD3TXQc4atxdsesFfK2T8= CHC

Install all LXC packages

liblxc luci-app-lxc lxc lxc-attach lxc-autostart lxc-cgroup lxc-checkconfig lxc-clone lxc-common lxc-config lxc-configs lxc-console lxc-create lxc-destroy lxc-execute lxc-freeze lxc-hooks lxc-info lxc-init lxc-ls lxc-lua lxc-monitor lxc-monitord lxc-snapshot lxc-start lxc-stop lxc-templates lxc-unfreeze lxc-unshare lxc-user-nic lxc-usernsexec lxc-wait