Recently I changed my Internet service provider to Kabel Deutschland which offers some really good bandwidth for a reasonable price. You get 32 MBit in the download direction and 2 Mbit in the upload direction. Additionally to this you can order a FRITZ!Box 7270 which allows you to use VoIP for the phone part. As I always try to maximize the usage of new hardware I started to explore what is possible with this combination. In this post I will explain how you get access to your FRITZ!Box using ssh. Following this post, some articles about how you can turn the FRITZ!Box into a OpenVPN server and how you can use the VoIP access point remotely from any computer having a VoIP software installed, will be done. As I said the hardware used is a FRITZ!Box Fon WLAN 7270 with the firmware 54/74.04.80 from 2009/12/15 which is an official one from AVM. Other firmware versions may work also, but I haven’t tested that. The following topics are all for advanced user. So if you aren’t in touch with Linux or start asking what the hell is vi and how get I out of it, stop reading now. All the information in this and the following posts are based on several websites I found in the Internet. Mainly this are some forum entries at http://www.ip-phone-forum.de, the series about the FRITZ!Box at http://www.tecchannel.de, the posts on http://www.teamarbyte.de, the blog at http://www.realriot.de and this article at http://www.cswpro.de. So thanks to all the people for sharing this kind of information. Before we start some words of caution: It’s easily possible to render the FRITZ!Box unusable. So there is no warranty of any kind if you do some of the things mentioned in this blog. Also I’m not responsible for anything happen to your FRITZ!Box or the Internet connection. After all making a backup of your current configuration might be a good idea.
Preparing the FRITZ!Box
First of all you should register an account at http://www.dyndns.com or any other service for dynamic IP resolution. You can then add this information to the “DynamicDNS” tab of the Internet settings in the FRITZ!Box web frontend. This will allow you to connect to your FRITZ!Box without knowing the IP after a reconnect. Lets use us xtestx.dyndns.org in the following examples. Next you need telnet access to the FRITZ!Box to make the initial configuration for the ssh server. Enabling telnet is as simple as calling #96*7* with a local connected phone. To disable the telnet daemon later you call #96*8*. Now you need a usbstick where all the software will be installed on and which have to be connected to the FRITZ!Box all the time. In principle the size doesn’t matter, around 5 MBytes free space should be enough. Time to connect to the FRITZ!Box for the first time. A simple telnetĀ fritz.box
should do it.
Installation and configuration of the ssh server
For the ssh server software dropbear is used. You can get a prepared version for the FRITZ!Box from the spblinux server.
cd /var/tmp wget http://www.spblinux.de/fbox.new/cfg_dropbear chmod u+x cfg_dropbear
After downloading, the server has to be installed on the usbstick by executing
./cfg_dropbear usb_install
In my case the software is installed into /var/media/ftp/FLASH-DISK-01/addons
. Now we will create a host key which will be reused even after a reboot of the FRITZ!Box.
cd /var/media/ftp/FLASH-DISK-01/addons dropbear/bin/dropbearkey -t rsa -f dropbear/etc/sshd_rsa_host_key
The FRITZ!Box has initial no root password entry. We have to create one and save the password hash for later usage.
passwd cat /etc/passwd
You have to note the part between root: and the next colon.
Putting all together
The initial starting point for all modifications on the FRITZ!Box is a file called /var/flash/debug.cfg
. Its executed on every boot after all the other services are started. We will use it only to start a script which is located on the usbstick. This makes sure that even after a firmware upgrade our changes are not lost. The content looks like the following:
# execute the start script which is on the usb stick /var/media/ftp/FLASH-DISK-01/addons/startup.sh
Please note that you have to use the nvi
to edit files on the flash device from the FRITZ!Box, cause all files there are marked as non regular. The startup.sh
will do all the work necessary for preparing and starting the ssh server. The content is:
#!/bin/sh # whats the base usb directory BASE=/var/media/ftp/FLASH-DISK-01/addons # change to a temporary directory cd /var/tmp # install and start dropbear with our host key ${BASE}/cfg_dropbear usb_install /bin/dropbear -E -r ${BASE}/dropbear/etc/sshd_rsa_host_key # set passwords echo 'root:XXXXXX:0:0:root:/var/tmp/:/bin/sh' > /var/tmp/passwd echo 'ftpuser:any:1000:0:ftp user:/var/media/ftp:/bin/sh' >> /var/tmp/passwd # add fritz box itself in resolv.conf to resolv dhcp attached machines in your network echo "nameserver 192.168.220.1" >> /var/tmp/resolv.conf
You have to replace XXXXXX by the password hash you created above. In my case the network is in the 192.168.220.0/24 subnet and the FRITZ!Box has the IP 192.168.220.1. You have to adjust the name server entry to your environment. After a reboot which could be initiated with reboot
you should be able to access your FRITZ!Box over ssh.
To allow connections from the outside of your home you need to change the forward rules of the internal FRITZ!Box firewall. Unfortunately you can’t add this rule using the web frontend cause it isn’t allowed to add rules which targeting the FRITZ!Box itself. Most of the settings for the FRITZ!Box configuration are located in a file called /var/flash/ar7.cfg
. Use nvi to edit it and search for the string forwardrules. If this string is missing you could temporary create a rule in the web frontend, which will you later remove again. You have to change the line so that it looks like this:
forwardrules = "tcp 0.0.0.0:7777 0.0.0.0:22 0 # SSH-Server";
Here the connection port is 7777, but of course could you use any valid port number. You could also add more rules by separating them with a comma. To make the configuration change happen the execution of ar7cfgchanged
is sufficient.
Conclusion
With this setup its possible to connect to the FRITZ!Box with the very secure ssh protocol from inside of your home environment and from the outside. This makes it easily possible to change parameters without manually starting the telnet daemon which is in addition very insecure. Don’t forget to remove any temporary rules from the ar7.cfg file and to disable the telnet daemon with the procedure explained above. Stay tuned for the next post about going one step further and making the FRITZ!Box an OpenVPN connection point for your internal network.
Update
There is a new article about installing ssh on the FRITZ!Box. If you are interested have a look at this post.