Зміст

PureNAS з rscriptd на Debian 13.2

Домовленості

Для прикладу припустимо, що Ubilling з усіма потрохами розташований на сервері доступному за адресою 1.2.3.6 а Чистий Debian 13.2 встановлено на сервер, з відповідними інтерфейсами. Ви не повинні конфігурувати інтерфейси самостійно, PureNAS зробить це автоматично за вас при своїй ініціалізації. Основна ідея - PureNAS сам все налаштовує і запускає, базуючись на своєму одному і єдиному файлі конфігурації.

Встановлення PureNAS

su -
apt install -y ethtool net-tools conntrack tcpdump htop mtr-tiny sudo irqbalance
apt install -y git expat libexpat1-dev build-essential softflowd snmpd snmp
apt install -y php8.4-cli php8.4-mysqli php8.4-mbstring php8.4-bcmath php8.4-curl
apt install -y build-essential libncurses-dev libssl-dev bc flex bison dwarves rsync libelf-dev
apt install -y autoconf libtool pkg-config libpcap-dev libnfnetlink-dev libbpf-dev libdbus-1-dev 
apt install -y libvirt-dev libxml2-dev uuid-dev clang

після чого просто клонуємо його поточну гілку собі:

git clone https://github.com/nightflyza/PureNAS.git /etc/PureNAS

вмикаємо автоматичний старт при запуску

cp -R /etc/PureNAS/dist/purenas.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable purenas.service

розгортаємо пресет автоматичних тюнячок

cp -R /etc/PureNAS/dist/99-nat-tuning.conf /etc/sysctl.d/
sysctl -p /etc/sysctl.d/99-nat-tuning.conf

Компілюємо rscriptd

wget http://ubilling.net.ua/stg/stg-2.409.tar.gz
tar zxvf stg-2.409.tar.gz
cd stg-2.409/projects/rscriptd/
./build 
/usr/bin/gmake install

розгортаємо заготовки конфігів та скриптів ініціалізації користувачів

cp -R /etc/PureNAS/dist/rscriptd/* /etc/rscriptd/

Налаштування PureNAS

Всі налаштування PureNAS відбуваються в одному єдиному файлі /etc/PureNAS/purenas.conf. Для зображеного на схемі прикладу всі важливі налаштування, які базово треба модифікувати, будуть виглядати якось так:

purenas.conf
LAN_IF="enp0s3"
WAN_IF="enp0s8"
 
USER_NET="172.16.0.0/17"
USER_GATEWAY_IP="172.16.0.1/17"
FORCE_ASSIGN_GATEWAY_IP="YES"
 
WAN_IP="1.2.3.5/24"
WAN_DEFAULT_ROUTE="1.2.3.4"
 
SHAPER_ENABLED="YES"
 
NAT_ENABLED="YES"
 
RSCRIPTD_ENABLED="YES"

взагалі пробіжіться очима по конфігу - там всі опції прокоментовані і доволі самоочевидні.

Налаштування rscriptd

/etc/rscriptd/rscriptd.conf
ExecutersNum=4
ConfigDir=/etc/rscriptd
Password=тут_ваш_пароль_rscriptd_з_stargazer.conf
Port=9999
UserTimeout=3600
ScriptOnConnect=/etc/rscriptd/OnConnect
ScriptOnDisconnect=/etc/rscriptd/OnDisconnect
/etc/rscriptd/dbconfig.conf
host = 1.2.3.6
port = 3306
username = somelogin
password = somepassword
database = stg

З боку Ubilling-a

Перед першим використанням, переконайтеся, що з боку сервера білінгу, в /etc/stargazer.conf присутня розкоментована секція вигляду

stargazer.conf
<Module remote_script>
SendPeriod = 10
SubnetFile =/etc/stargazer/remote_nas.conf
Password = тут_ваш_пароль_rscriptd
UserParams=Cash Tariff
Port = 9999
</Module>

Також потрібні увімкнені опції RESET_AO та STGNASHUP у billing.ini для запобігання проблемам із реініціалізацією користувачів на віддалених NAS.

Також варто додати ваш сервер rscriptd в табличку безпечних хостів у firewall.conf з боку вашого біллінгу, якось ось так

${FwCMD} table 22 add 1.2.3.5

Про створення користувача з віддаленим доступом до бази

CREATE USER 'somelogin'@'%' IDENTIFIED BY 'somepassword';
GRANT ALL PRIVILEGES ON *.* TO 'somelogin'@'%' WITH GRANT OPTION;

Запуск PureNAS

Робиться однією командою: /etc/PureNAS/init та виглядає наступним чином

__________                      _______      _____    _________
\______   \__ _________   ____  \      \   /  _  \  /   _____/
|     ___/  |  \_  __ \_/ __ \ /   |   \  /  /_\  \ \_____  \ 
|    |   |  |  /|  | \/\  ___//    |    \/    |    \/        \
|____|   |____/ |__|    \___  >____|__  /\____|__  /_______  /
                             \/        \/         \/        \/ 

== Initializing PureNAS ==
== Loading kernel modules ==
== Reapplying sysctl settings ==
== Sysctl settings reapplied ==
== DONE ==
== Enabling IP forwarding ==
== Configuring interfaces ==
== Enabling internal interface enp0s3 ==
== Assigning gateway IP(s) to enp0s3 ==
== Configuring firewall ==
== Cleaning up existing firewall configuration ==
== Configuring user networks ==
== Configuring user gateways ==
== Configuring banned hosts ==
== Configuring allowed DNS servers ==
== Configuring protected ports ==
== Configuring safe zones ==
== Configuring DNS restrictions for user network ==
== Configuring allowed always hosts ==
== Configuring user isolation ==
== Configuring blocked incoming ports ==
== Configuring blocked outgoing ports ==
== Configuring default firewall block policy for inactive users ==
== Configuring NAT ==
== Configuring shaper ==
== Cleaning up existing shaper configuration ==
== Loading kernel modules ==
== Created interface ifb0 ==
== Using enp0s3 as user gateway ==
== Initializing hash table structure ==
== Shaper configuration complete ==
== Starting rscriptd ==
== FINISHED ==

Як перевірити, чи користувачів ініціалізовано? Ну хоча б якось так:

Також можете подивитись, шейпера всіх або конкретного користувача за допомогою /etc/PureNAS/actions/uc

журнал з'єднання та роз'єднання користувачів знаходиться в /var/log/allconnect.log.

Про SNMP

Вмикається аж двома опціями в конфігу

purenas.conf
SNMP_ENABLED="YES"
SNMP_COMMUNITY="yoursecretcommunity"

Про підрахунок трафіку

Якщо ви з якоїсь причини не використовуєте OphanimFlow та покладаєтесь на cap_nf, вам може знадобитись NetFlow, його можна просто ввімкнути ось так:

purenas.conf
NETFLOW_SENSOR_ENABLED="YES"
NETFLOW_SAMPLING_RATE="100"
NETFLOW_COLLECTOR="1.2.3.6"
NETFLOW_PORT="42111"

У випадку, якщо в вас є вже налаштований OphanimFlow здоровий глузд та міркування швидкодії, підказують зібрати sFlow сенсор

git clone https://github.com/sflow/host-sflow.git
cd host-sflow
make clean
make FEATURES="HOST"
make install

після чого просто його ввімкнути якось так:

purenas.conf
SFLOW_SENSOR_ENABLED="YES"
SFLOW_SAMPLING_RATE="100"
SFLOW_COLLECTOR="192.168.0.223"
SFLOW_PORT="6343"

(тут очевидно ми вважаємо, що OphanimFlow знаходиться на доступному хості 192.168.0.223)