Jump to content

Recommended Posts

Posted (edited)

Добрый день. Стоит задача раз в сутки менять пароль гостевой вай-фай сети. Пароль генерируется автоматически и состоит из 8ми цифр. 

До этого был тплинк на опен-врт и там это решалось через VBS-скрипт на ПК, который закидывался в планировщик Windows. Скрипт генерировал пароль, записывал пароль в хтмл-файл и загружал его на фтп-сервер, откуда им мог воспользоваться определенный круг лиц. Затем скрипт стучался в роутер по ssh, менял там пароль на вновь сгенерированный и перезагружал вай-фай, выглядело это примерно так:

ssh root@192.168.100.1 uci set wireless.@wifi-iface[0].key=$pass

ssh root@192.168.100.1 uci commit

ssh root@192.168.100.1 wifi down radio0

ssh root@192.168.100.1 wifi up radio0

 

Сейчас перешел на Giga SE, писал в поддержку кинетика, там мне сказали, что нативно ничего подобного реализовать не получится и посоветовали обратиться сюда. Соответственно, обращаюсь.

В идеале мне интересен вариант, когда бы все операции целиком исполнялись на роутере, без участия ПК, т.е. роутер бы генерил пароль, менял его и где-то публиковал. Возможно ли это сделать, и как? Готов заплатить за рабочее решение, если это не слишком сложно и дорого.

 

П.С. Уточню, что сервисы авторизации по смс для моих задач не подходят.

Edited by lascorpio
  • Upvote 1
Posted

  

7 часов назад, lascorpio сказал:

Стоит задача раз в сутки менять пароль гостевой вай-фай сети

Как вариант -

  1. ставим компонент "Сервер SSH"
  2. устанавливаем приложение Putty plink, так как к сожалению компонент не поддерживает авторизацию по ключу
  3. команда в скрипте выглядит примерно так
    plink 192.168.100.1 -P 22 -l admin -pw YourAdminPassword -batch "interface GuestWiFi authentication wpa-psk 'test23445556'"

    -P - порт, если стандартный, 22, можно не указывать
    -l - пользователь (не root, а admin)
    -pw - пароль
    -batch - подавляет интерактивные запросы
    "interface GuestWiFi authentication wpa-psk 'test23445556'" - команда CLI, меняющая пароль сети Wi-Fi.

Если на роутер установлен Entware, то вместо штатного dropbear можно установить пакет openssh-server, он поддерживает авторизацию по ключу.

В этом случае компонент "Сервер SSH" устанавливать не надо. Но в entware надо установить пакет ndmq, это приложение, которое позволяет вводить команды CLI (для процессоров ARM64 пока не работает).

ssh root@192.168.100.1 ndmq "interface GuestWiFi authentication wpa-psk 'test23445556'"

В entware пользователь именно root.

 

Posted

Dropbear тоже поддерживает авторизацию по ключам, но файл authorized_keys при этом должен лежать в директории /opt/etc/dropbear.

Проще всего в Entware сделать симлинк файла /opt/root/.ssh/authorized_keys в директорию /opt/etc/dropbear

ln -s /opt/root/.ssh/authorized_keys /opt/etc/dropbear

После чего можно давать команды используя ssh.

Posted
13 часа назад, lascorpio сказал:

Сейчас перешел на Giga SE, писал в поддержку кинетика, там мне сказали, что нативно ничего подобного реализовать не получится и посоветовали обратиться сюда. Соответственно, обращаюсь.

В идеале мне интересен вариант, когда бы все операции целиком исполнялись на роутере, без участия ПК, т.е. роутер бы генерил пароль, менял его и где-то публиковал. Возможно ли это сделать, и как?

Необходимо Entware, можно во внутреннюю память + ndmq + cron. В итоге рассмотрите вариант :

Скрытый текст
Wifi 2.4

(config)> interface WifiMaster0/AccessPoint0 authentication wpa-psk Eethaich9z
Network::Interface::Wifi: "WifiMaster0/AccessPoint0": WPA PSK set.
(config)> system configuration save
Core::System::Configuration: Saving (cli).
(config)> 

В WEB это будет

1745343688_-2.jpg.b59e991902f8377d4b6093f03393ffe1.jpg

на роутере это

/ # ndmq -p "interface WifiMaster0/AccessPoint0 authentication wpa-psk Eethaich9z" -x
<response>
    <message code="73335684" ident="Network::Interface::Wifi" source="" warning="no">
        "WifiMaster0/AccessPoint0": WPA PSK set.
    </message>
    <prompt>(config)</prompt>
</response>
/ # 


или 

/ # ndmq -p "interface WifiMaster0/AccessPoint0 authentication wpa-psk Eethaich9z"
/ #

Далее прописать в нужное время в cron. Пароль можно брать из готового файла в котором будет просто строки

1234567890
1234567891
1234567892
1234567893
1234567894
1234567895
1234567896
...

По мере использования первую строку можно удалить.

Или случайный набор символов каждый раз можно брать из

/ # date | md5sum
94e002e481f677975dda2f2c7bde102d  -
/ # 

урезав его чуток

 

Или найти в интернете генерация пароль по проще.

 

Posted
В 24.08.2021 в 22:56, lascorpio сказал:

т.е. роутер бы генерил пароль, менял его и где-то публиковал.

  1. Ставим и настраиваем OPKG
  2. Заходим по SSH, ставим три пакета

    opkg install cron ndmq mc

     

  3. FTP-сервер по вкусу, можно из коробки, можно из entware. Как по мне - так тот, что из компонента "FTP-сервер" удобнее, можно пользователей заводить в интерфейсе роутера.
  4. Пишем скрипт 
    mcedit ./pw_gen

    Скрипт может быть примерно такой
    #!/bin/sh
    
    # Options
    FTP_DIR="/your/ftp/directory"
    FILE_PASSWORD="password"
    
    # Generate a pasword
    PASSWD_GEN=`dd if=/dev/urandom bs=16 count=1 oflag=direct|sha256sum|cut -c 1-8`
    
    # Put password to file
    echo $PASSWD_GEN > $FTP_DIR/$FILE_PASSWORD
    
    # Change WPA-PSK key
    ndmq -p "interface GuestWiFi authentication wpa-psk $PASSWD_GEN"

     

  5. делаем скрипт исполняемым и помещаем его в директорию cron.daily (пакет cron установили выше)

    cp ./pw_gen /opt/etc/cron.daily
    chmod 755 /opt/etc/cron.daily

По поводу каталога /your/ftp/directory. Если в качестве FTP-сервера используется компонент "FTP-сервер"

Флэшку, или диск подключенный к роутеру, можно разбить на два раздела. Один под Entware, второй под файлы.

Оба раздела будут видны из Entware, но только один из них будет доступен простым пользователям по FTP - тот, что отведен под файлы.

Оба раздела монтируются в файловой системе роутера в директорию /tmp/mnt в виде, например, таком

/tmp/mnt/f612ceca-4826-45a6-af92-2ba3aa33ea77
/tmp/mnt/cd6ba69a-d125-4624-8bea-f4d80a2d5343

Под OPKG, допустим, выделен раздел /tmp/mnt/f612ceca-4826-45a6-af92-2ba3aa33ea77, тогда /your/ftp/directory будет /tmp/mnt/cd6ba69a-d125-4624-8bea-f4d80a2d5343, то есть

# Options
FTP_DIR=/tmp/mnt/cd6ba69a-d125-4624-8bea-f4d80a2d5343

 

  • Thanks 1
Posted

спасибо большое за ответы! особенно за последний вариант, на днях найду время, переварю полученную информацию, постараюсь реализовать, заранее извиняюсь, если приду с тупыми вопросами (=

Posted

От deprecated XML-интерфейса, и, в частности ndmq лучше отучаться, в новых инсталляционных пакетах ndmq больше не будет, хотя утилита всё ещё доступна в пакетах.

По возможности переходите на REST core interface, пример:

wget --post-data='[{"opkg": {"initrc": {"path": "/opt/etc/init.d/rc.unslung", "no": false}}},{"system": {"configuration": {"save": true}}}]' http://127.0.0.1:79/rci/ -qO -

 

Posted
В 25.08.2021 в 23:21, vadimbn сказал:
opkg install cron ndmq mc

ndmq не ставит, говорит пакет на найден. Так понимаю, его выпилили? Как установить теперь?

Posted
34 минуты назад, lascorpio сказал:

ndmq не ставит, говорит пакет на найден. Так понимаю, его выпилили? Как установить теперь?

Любые пакеты, когда-либо существовавшие в репозитории, можно найти в папке archive:

opkg install http://bin.entware.net/mipselsf-k3.4/keenetic/archive/libndm_1.1.15-1_mipsel-3.4_kn.ipk
opkd install http://bin.entware.net/mipselsf-k3.4/keenetic/archive/ndmq_1.0.2-7_mipsel-3.4_kn.ipk

А вообще надо отучаться постепенно отучаться от ndmq, причина выше.

Posted (edited)

спасибо. Правда у меня mips, а не mipsel (но я вроде разобрался, установил)

Edited by lascorpio
Posted
В 25.08.2021 в 23:21, vadimbn сказал:

делаем скрипт исполняемым и помещаем его в директорию cron.daily (пакет cron установили выше)

Спасибо, кажется всё получилось, но в какое время отрабатывает крон-дэйли и как это настроить? Например мне нужно, чтоб скрипт отрабатывал в 10 утра.

 

В 25.08.2021 в 23:21, vadimbn сказал:
# Generate a pasword
PASSWD_GEN=`dd if=/dev/urandom bs=16 count=1 oflag=direct|sha256sum|cut -c 1-8`

Как сделать генератор, который будет только из чисел пароль 8-символьный формировать? 

Posted (edited)
1 час назад, lascorpio сказал:

Например мне нужно, чтоб скрипт отрабатывал в 10 утра.

добавить в /opt/etc/crontab строчку

00 10 * * * root /path/to/your/script/pw_gen

/path/to/your/script заменить на путь до вашего скрипта, разумеется.

Потом дать команду

/opt/etc/init.d/S10cron restart

 

1 час назад, lascorpio сказал:

Как сделать генератор, который будет только из чисел пароль 8-символьный формировать?

Хм... Ну, например, удалим из строчки хеша sha256 все буквы. А дополнительно возьмем хеш не sha256, а sha512

PASSWD_GEN=`dd if=/dev/urandom bs=512 count=1 oflag=direct|sha512sum|sed 's~[^[:digit:]/]\+~~g'|cut -c 1-8`

 

Edited by vadimbn
  • Thanks 1
Posted
4 часа назад, Александр Рыжов сказал:

А вообще надо отучаться постепенно отучаться от ndmq, причина выше.

Вот знать бы еще полные пути формирования этих rci-запросов. Документация по ним есть?

Вот например, команда

wget -qO - --post-data='[{"encryption":{"wpa":true}}]' localhost:79/rci/interface/GuestWiFi

работает. По логике вещей должна формироваться так же и команда смены wpa-psk-ключа

wget -qO - --post-data='[{"authentication":{"wpa-psk":"Password"}}]' localhost:79/rci/interface/GuestWiFi

Но судя по

wget -qO - localhost:79/rci/show/interface

в Wi-Fi-интерфейсах вообще нет свойства "autentication" или "wpa-psk".

Posted

Спасибо! Так понимаю, проверить отработает ли планировщик можно будет уже завтра в 10 утра? 

На текущий момент crontab выглядит так:

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/opt/bin:/opt/sbin
MAILTO=""
HOME=/
# ---------- ---------- Default is Empty ---------- ---------- #
*/1 * * * * root /opt/bin/run-parts /opt/etc/cron.1min	
*/5 * * * * root /opt/bin/run-parts /opt/etc/cron.5mins	
01 * * * * root /opt/bin/run-parts /opt/etc/cron.hourly	
02 4 * * * root /opt/bin/run-parts /opt/etc/cron.daily	
22 4 * * 0 root /opt/bin/run-parts /opt/etc/cron.weekly	
42 4 1 * * root /opt/bin/run-parts /opt/etc/cron.monthly	
00 10 * * * root /opt/etc/cron.daily

не спорит ли строчка 

02 4 * * * root /opt/bin/run-parts /opt/etc/cron.daily	

с последней добавленной строкой?

Posted (edited)
20 минут назад, lascorpio сказал:

не спорит ли строчка 

у вас скрипт, который вы написали, называется cron.daily? И находится в /opt/etc?

Если стоит задача всё, что есть в директории /opt/etc/cron.daily запускать в 10:00 каждый день, надо править ту строчку, что выше, "00 10 * * * root /opt/bin/run-parts /opt/etc/cron.daily"

Но лучше этого не делать, скрипт поместить куда-нибудь, например в "/opt/root/", а последнюю строчку сделать такой "00 10 * * * root /opt/root/pw_gen"

И не забудьте перезапустить сервис cron.

/opt/etc/init.d/S10cron restart

 

Edited by vadimbn
  • Thanks 1
  • Upvote 1
Posted
31 минуту назад, vadimbn сказал:

у вас скрипт, который вы написали, называется cron.daily? И находится в /opt/etc?

да, понял свою ошибку )

32 минуты назад, vadimbn сказал:

Если стоит задача всё, что есть в директории /opt/etc/cron.daily запускать в 10:00 каждый день, надо править ту строчку, что выше, "00 10 * * * root /opt/bin/run-parts /opt/etc/cron.daily"

Но лучше этого не делать, скрипт поместить куда-нибудь, например в "/opt/root/", а последнюю строчку сделать такой "00 10 * * * root /opt/root/pw_gen"

 

я скрипт поместил в cron.daily как вы выше рекомендовали 🙂

ок, перенесу в root, спасибо.

 

33 минуты назад, vadimbn сказал:

И не забудьте перезапустить сервис cron.

первый раз когда исполнил эту команду cron просто запустился, т.е. он не был запущен, уже при повторном выполнении произошел перезапуск. Отсюда вопрос - он сам будет запускаться? Например при ребуте роутера? 

 

П.С.

еще не подскажите как мне в файл с паролем добавить хтмл-разметку, чтоб сделать пароль крупным шрифтом и посередине? Например для вывода его на экран.

Posted
1 час назад, lascorpio сказал:

Отсюда вопрос - он сам будет запускаться? Например при ребуте роутера? 

Конечно. Все сервисы, скрипты автозапуска которых помещаются в /opt/etc/init.d запускаются с каждым перезапуском роутера.

 

1 час назад, lascorpio сказал:

не подскажите как мне в файл с паролем добавить хтмл-разметку, чтоб сделать пароль крупным шрифтом и посередине?

echo "<html><head><title>Password for my guest WiFi</title></head><body><h1>Password for my WiFi is $PASSWD_GEN</h1></body></html>" > $FTP_DIR/$FILE_PASSWORD

 

  • Thanks 1
Posted
11 час назад, vadimbn сказал:

Вот знать бы еще полные пути формирования этих rci-запросов. Документация по ним есть?

Есть в справочнике CLI. Но можно и без справочника: открыть по F12 отладчик в браузере и выполнить нужную команду в веб-интерефейсе.

Posted (edited)

сегодня утром пароль не изменился, не обновился файл с паролем, в логах вот так:

Цитата
[I] Sep  6 10:00:01 cron[1585]: (root) CMD (/opt/root/pw_gen)
[I] Sep  6 10:00:01 cron[1583]: (root) CMD (/opt/bin/run-parts /opt/etc/cron.1min^I)
[I] Sep  6 10:00:01 cron[1584]: (root) CMD (/opt/bin/run-parts /opt/etc/cron.5mins^I)

вроде бы следует, что скрипт запустился? Однако ничего не получилось. Если вручную обработать скрипт - всё работает.

crontab:

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/opt/bin:/opt/sbin
MAILTO=""
HOME=/
# ---------- ---------- Default is Empty ---------- ---------- #
*/1 * * * * root /opt/bin/run-parts /opt/etc/cron.1min	
*/5 * * * * root /opt/bin/run-parts /opt/etc/cron.5mins	
01 * * * * root /opt/bin/run-parts /opt/etc/cron.hourly	
02 4 * * * root /opt/bin/run-parts /opt/etc/cron.daily	
22 4 * * 0 root /opt/bin/run-parts /opt/etc/cron.weekly	
42 4 1 * * root /opt/bin/run-parts /opt/etc/cron.monthly	
00 10 * * * root /opt/root/pw_gen

 

Edited by lascorpio
Posted
24 минуты назад, lascorpio сказал:

Если вручную обработать скрипт - всё работает.

А если так - 00 10 * * * root /opt/bin/sh /path/to/your/script/pw_gen ?

Только не ждите 10 часов следующего дня, время измените в файле /opt/etc/cron, на "через 2 минуты после текущего" и перезапустите cron.

  • Thanks 1
Posted
2 часа назад, lascorpio сказал:

Если вручную обработать скрипт - всё работает.

Если вручную скрипт работает, а в cron'е — нет, то скорее всего дело в среде выполнения: наличия переменных, порядка путей в $PATH и т.п. 

Posted
4 часа назад, vadimbn сказал:

А если так - 00 10 * * * root /opt/bin/sh /path/to/your/script/pw_gen ?

Только не ждите 10 часов следующего дня, время измените в файле /opt/etc/cron, на "через 2 минуты после текущего" и перезапустите cron.

у меня нет файла cron по указанному пути, я просто закинул скрипт в cron.1min, на всякий перезапустил cron - не работает. :( 

 

2 часа назад, Александр Рыжов сказал:

Если вручную скрипт работает, а в cron'е — нет, то скорее всего дело в среде выполнения: наличия переменных, порядка путей в $PATH и т.п. 

я просто вручную исполняю команды из скрипта в консоли, если надо протестить целиком скрипт - подскажите, плз, команду, как его запустить из консоли.

 

сам скрипт:

FTP_DIR="/tmp/mnt/0D64-1511"
FILE_PASSWORD="password.html"
PASSWD_GEN=`dd if=/dev/urandom bs=512 count=1 oflag=direct|sha512sum|sed 's~[^[:digit:]/]\+~~g'|cut -c 1-8`
echo "<br><br><br><br><h1 style=text-align:center;><strong>$PASSWD_GEN</strong></h1>" > $FTP_DIR/$FILE_PASSWORD
ndmq -p "interface GuestWiFi authentication wpa-psk $PASSWD_GEN"

 

добавлял его так, как советовал выше vadimbn:

mcedit ./pw_gen

затем пишем скрипт, сохраняем и:

cp ./pw_gen /opt/etc/cron.1min
chmod 755 /opt/etc/cron.1min

 

Posted

я всё настраиваю из клиента Termius на iPad, может быть он как-то не так сам скрипт сохраняет, кодировку там? 

Posted

Во первых, там, в скрипте, первая строчка не просто  так стоит

#!/bin/sh

Это то приложение, которое выполняет директивы, прописанные в скрипте.

Она должна быть в первой строке скрипта. Но она должна быть такой -

#!/opt/bin/sh

Прямо как есть, так и вставьте в скрипт. В первую строчку.

Во вторых, если скрипт у вас лежит в /opt/root, и называется pw_gen, то исполняемым его делает команда

chmod 755 /opt/root/pw_gen

Эта команда меняет атрибуты файла, делая его исполняемым для всех, доступным для чтения и записи владельцу, и только для чтения - всем остальным. После этих двух пунктов скрипт можно выполнить прямо в командной строке, вот так

/opt/root/pw_gen

Как обычную команду, и он будет исполняться.

 

  • Upvote 2
Posted

Спасибо вам, кажется всё получилось, по-крайней в папке cron.1min скрипт сейчас исполняется как надо, раз в минуту )) Посмотрим сработает ли сегодня в 10 утра, пока оставил строчку в crontab прежней:

00 10 * * * root /opt/root/pw_gen

думаю проблема была в:

#!/opt/bin/sh

потому что всё остальное я вроде делал правильно - и права выставлял и 

#!/bin/sh 

писал в начале скрипта (это уже под конец решил попробовать без нее, когда идеи кончились). Может конечно где-то и накосячил, но в общем сейчас пока всё заколосилось, так что не трогаю ))

Posted
29 минут назад, lascorpio сказал:

Посмотрим сработает ли сегодня в 10 утра

Если не сработает, можно поместить в /opt/etc/cron.d текстовый файл, например, pw_gen.cron, со строкой

00 10 * * * /opt/root/pw_gen

 

  • Thanks 1
Posted

Всё заколосилось, пароль поменялся с утра. :) Потестирую еще в течение недели, посмотрю как всё будет работать, попробую роутер повыключать и т.д.

Ещё вопросец - сейчас всё крутится на флешке, но так понимаю entware можно и во внутренней памяти развернуть - будут ли какие-то нюансы по работе скрипта без флешки? ФТП-сервер во внутреннюю память будет писать файл с паролем? И насколько можно считать эту задачу износоёмкой по отношению к ресурсу nand-памяти (или там eMMC?)?

Posted
2 часа назад, lascorpio сказал:

но так понимаю entware можно и во внутренней памяти развернуть - будут ли какие-то нюансы по работе скрипта без флешки?

Во всех устройствах, кроме Peak, этой самой памяти маловато. И будет ли доступ по FTP к этой памяти - скорее всего надо будет ставить FTP-сервер из entware.

Кстати, если на выходе получается html-файл, то вместо FTP-сервера можно поставить HTTP-сервер, например, lighthttpd, с авторизацией.

2 часа назад, lascorpio сказал:

И насколько можно считать эту задачу износоёмкой по отношению к ресурсу nand-памяти (или там eMMC?)?

Пишет оно каждый день, но мало. Если не писать никакие логи, то вряд ли будет сильный износ.

Posted (edited)
10 часов назад, vadimbn сказал:

Во всех устройствах, кроме Peak, этой самой памяти маловато.

Во внутренней памяти развернуто Entware, вопрос только в сервисах которые необходимы.

Скрытый текст
/opt/etc/init.d # df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/root                21504     21504         0 100% /
tmpfs                    62316         0     62316   0% /dev
tmpfs                    62316       464     61852   1% /tmp
ubi0_0                   56540     18844     34772  35% /storage
ubi0_0                   56540     18844     34772  35% /opt
/opt/etc/init.d # opkg list-installed
busybox - 1.31.1-6
cron - 4.1-3
dropbear - 2020.81-1
entware-release - 1.0-2
findutils - 4.7.0-2
glib2 - 2.66.1-1
grep - 3.6-1
hdparm - 9.60-1
htop - 3.0.2-1
ip-bridge - 4.4.0-10a
iperf3 - 3.9-1
iptables - 1.4.21-3
jsonfilter - 2018-02-04-c7e938d6-1
ldconfig - 2.27-11
libattr - 2.4.48-2
libblkid - 2.36-2
libc - 2.27-11
libexslt - 1.1.34-2
libffi - 3.3-2
libgcc - 8.4.0-11
libiconv-full - 1.11.1-4
libintl-full - 0.19.8.1-2
libjson-c - 0.15-1
libmbedtls - 2.16.8-1
libmnl - 1.0.4-2
libmount - 2.36-2
libncurses - 6.2-1
libncursesw - 6.2-1
libndm - 1.1.15-1
libnl-tiny - 2020-08-05-c291088f-1
libopenssl - 1.1.1h-1
libpcap - 1.10.0-1
libpcre - 8.44-2
libpthread - 2.27-11
librt - 2.27-11
libslang2 - 2.3.2-4
libssh2 - 1.9.0-2
libssp - 8.4.0-11
libstdcpp - 8.4.0-11
libubox - 2020-08-06-9e52171d-1
libuuid - 2.36-2
libuv - 1.40.0-1
libxml2 - 2.9.10-2
libxslt - 1.1.34-2
locales - 2.27-9
mc - 4.8.25-1
ndmq - 1.0.2-7
netdata - 1.26.0-1
openssh-sftp-server - 8.4p1-1
opkg - 2020-11-24-61b3c62d-1
opt-ndmsv2 - 1.0-12a
poorbox - 1.31.1-3
tcpdump - 4.9.3-3
terminfo - 6.2-1
ubi-utils - 2.1.2-1
xmlstarlet - 1.6.1-1
zlib - 1.2.11-3
zoneinfo-asia - 2020d-1
zoneinfo-europe - 2020d-1
/opt/etc/init.d # 

 

Рассмотрите вариант рассылки SMS

 

Edited by vasek00
Posted
13 часа назад, lascorpio сказал:

И насколько можно считать эту задачу износоёмкой по отношению к ресурсу nand-памяти (или там eMMC?)?

Как правило nand в роутерах это SLC со 100 тыс. циклов записи.

Узнать точно что за модель NAND можно открыв self-test (или dmesg после перезагрузке в консоли), в поиск вписать NAND chip found

  • Upvote 1

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...