Для своей домашней сети я когда-то организовал роутер из устаревшего компьютера, поскольку обычный бытовой плохо справлялся с нагрузкой. На роутер поставил FreeBSD. Не то чтобы я раскаялся в этом выборе. В конце концов, получилось познавательно. Но мне, человеку от сетевого администрирования далекому и с юниксами плохо знакомому, приходилось уж слишком много возиться с этим роутером по любому поводу. Так что я перешел на pfSense.
Вот pfSense — это для меня самое то. Все уже готово, настроено, собрано в красивый web-интерфейс. Практически все, что нужно от роутера, присутствует. Даже шейпер трафика, который я со своими кривыми руками на FreeBSD не то что настроить — запустить не смог. А тут на всем готовом.
Обратной стороной перехода на pfSense является, конечно, потеря гибкости. Система задумывалась не как конструктор, а как узкоспециализированная ОС для роутеров. Установка произвольного дополнительного софта хоть и возможна, но не поощряется. С точки зрения безопасности, чем меньше софта на роутере крутится, тем сложнее его хакнуть. К этому ограничению я приспособился в основном с помощью того, что перенес всякие рюшечки, что у меня на FreeBSD стояли, с роутера в другое место. Но одну из таких рюшечек — transmission — я по разным причинам хотел оставить на роутере. Мне это удалось без приложения героических усилий, но обошлось не без нюансов.
Собственно установка ничем не примечательна (pkg_add -r transmission-daemon
и pkg_add -r transmission-web
), а вот дальше есть любопытные моменты.
Первое: в pfSense нет /etc/rc.conf
. Даже если его создать, он будет удален после перезагрузки. Поэтому нужно вместо него использовать /etc/rc.conf.local
— если его нет, то создайте, и в нем пропишите настройки запуска transmisson. В моем случае они выглядят следующим образом:
1 2 3 4 5 6 7 |
transmission_enable="YES" transmission_conf_dir="/usr/local/etc/transmission/" transmission_user="transmission" transmission_flags="" transmission_download_dir="/data/transmission/downloads/" |
Второе: чтобы rc-скрипты демонов в /usr/local/etc/rc.d/
отрабатывали при загрузке, они должны иметь расширение .sh. Поэтому /usr/local/etc/rc.d/transmission
нужно переименовать (а лучше — скопировать, чтобы команда service
работала привычным образом) в transmission.sh
:
1 2 3 |
cp /usr/local/etc/rc.d/transmission /usr/local/etc/rc.d/transmission.sh |
И, наконец, десерт. После перезагрузки transmission отказывался запускаться со следующим сообщением:
1 2 3 4 |
/libexec/ld-elf.so.1: Shared object "libevent-2.0.so.6" not found, required by "transmission-daemon" /usr/local/etc/rc.d/transmission.sh: WARNING: failed to start transmission |
Очевидно, это опять самоочистка pfSense при перезагрузке в действии. Покопавшись в пакетах, я нашел команду, эффект от которой перезагрузку не переживает:
1 2 3 |
/sbin/ldconfig -m /usr/local/lib/event2 |
Выполнение этой команды оживит transmission. Чтобы эта команда выполнялась при загрузке роутера, лучше всего воспользоваться созданным специально для таких случаев механизмом в pfSense: таг shellcmd
(внутри тага system
) в config.xml
. Команда внутри такого тага будет выполнена при загрузке. Можно, чтобы не править config.xml
вручную, поставить пакет pfSense (не путать с пакетами FreeBSD!) с очевидным названием shellcmd, после чего команды shellcmd
можно будет править из web-интерфейса pfSense.
Дальнейшая настройка transmission ничем не отличается от таковой для FreeBSD, но для полноты картины и чтобы читателю не бегать лишний раз по форумам, вкратце опишу ее здесь.
На каталог с закачками нужно раздать необходимые права. Я поступил просто — поменял владельца:
1 2 3 |
chown -R transmission:transmission /data/transmission |
Настройки transmission обитают в /usr/local/etc/transmission/settings.json
, допустимые параметры описаны на wiki проекта, повторятся не буду. В качестве отправной точки приведу свой конфиг:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
{ "speed-limit-down": 11000, "speed-limit-down-enabled": true, "speed-limit-up": 5000, "speed-limit-up-enabled": true, "upload-slots-per-torrent": 14, "download-dir": "/data/transmission/downloads", "incomplete-dir": "/data/transmission/incomplete", "incomplete-dir-enabled": false, "preallocation": 2, "rename-partial-files": true, "start-added-torrents": true, "umask": 0, "watch-dir-enabled": false, "trash-original-torrent-files": true, "bind-address-ipv4": "0.0.0.0", "cache-size-mb": 16, "dht-enabled": true, "encryption": 1, "lazy-bitfield-enabled": true, "lpd-enabled": false, "pex-enabled": true, "utp-enabled": true, "peer-congestion-algorithm": "lp", "peer-limit-global": 240, "peer-limit-per-torrent": 60, "peer-port": 51413, "peer-port-random-high": 65535, "peer-port-random-low": 49152, "peer-port-random-on-start": false, "port-forwarding-enabled": false, "download-queue-enabled": true, "download-queue-size": 5, "queue-stalled-enabled": true, "queue-stalled-minutes": 30, "seed-queue-enabled": false, "seed-queue-size": 10, "rpc-authentication-required": true, "rpc-bind-address": "0.0.0.0", "rpc-enabled": true, "rpc-password": "password", "rpc-port": 9091, "rpc-url": "/transmission/", "rpc-username": "mgsxx", "rpc-whitelist": "192.168.0.*", "rpc-whitelist-enabled": false } |
Да! Не забудьте порт transmission (51413 в моем случае) в файрволе открыть, по TCP и UDP. Можно, конечно, оставить вопрос на откуп UPnP, но я предпочитаю явное правило — в первую очередь для того, чтобы натравить на него шейпер.
Для доступа к transmission есть, во-первых, Web-интерфейс (http://192.168.0.1:9091/ в моем случае), а во-вторых, написанная добрыми людьми софтина Transmission Remote GUI, которая локальный функционал utorrent в рамках моих потребностей вполне заменяет.
Для доступа к закачкам с Windows PC я на роутере самбу поднял, но это уже отдельная тема. Если кому интересно, попросите в комментах, и я напишу пост.
Уточню: я возился с pfSense 2.1.4, что на базе FreeBSD 8.3.