Lokalne środowisko
Uruchomienie komunikacji lokalnie wymaga aplikacji NATS i gateway. Obie aplikacje wymagają dostępu do kluczy szyfrowania połączenia.
Generowanie kluczy szyfrowania
W katalogu scripts/certs w projekcie bitbucket.org/vemmio/vemmio-ha-deployment znajdują się następujące skrypty:
- generate-ca.sh - generuje klucze Root CA
- generate-server.sh - generuje klucze serwera NATS
- generate-client.sh - generuje klucze serwera gateway
Instalacja narzędzi
Skrypty generowania kluczy polegają na narzędziach cfssl i cfssljson.
Linux
curl -L https://github.com/cloudflare/cfssl/releases/download/v1.4.1/cfssl_1.4.1_linux_amd64 -o /usr/local/bin/cfssl
curl -L https://github.com/cloudflare/cfssl/releases/download/v1.4.1/cfssljson_1.4.1_linux_amd64 -o /usr/local/bin/cfssljson
chmod +x /usr/local/bin/{cfssl,cfssljson}
Generowanie kluczy Root CA
Skrypt wymaga podania ścieżki do katalogu, w którym zostaną umieszczone wygenerowane klucze.
W podanym katalogu pojawiły się pliki ca.pem i ca-key.pem,
odpowiednio certyfikat i klucz prywatny Root CA.
vemmio-ha-deployment $ ./scripts/certs/generate-ca.sh
generate-ca.sh CERT_DIR
vemmio-ha-deployment $ ./scripts/certs/generate-ca.sh local/data/certs
2020/09/25 08:53:34 [INFO] generating a new CA key and certificate from CSR
2020/09/25 08:53:34 [INFO] generate received request
2020/09/25 08:53:34 [INFO] received CSR
2020/09/25 08:53:34 [INFO] generating key: rsa-4096
2020/09/25 08:53:35 [INFO] encoded CSR
2020/09/25 08:53:35 [INFO] signed certificate with serial number 428774967271743083546366388773582785237325199999
vemmio-ha-deployment $ ls local/data/certs/
ca.csr ca-key.pem ca.pem csr.json
Generowanie kluczy serwera NATS
Skrypt wymaga trzech parametrów:
- ścieżki do katalogu, w którym istnieją klucze Root CA oraz zostaną umieszczonewygenerowane klucze,
- adres (domaną lub IP) serwera NATS
- nazwa dowolna, która zostanie dodana do nazw plików wygenerowanych kluczy
Podany adres serwera NATS będzie należało podać przy konfiguracji serwera gateway oraz zmianie adresu serwera, do którego łączy się sprzęt.
Nazwy plików wygenerowanych kluczy będzie trzeba wprowadzić do konfiguracji
serwera NATS.
Konfiguracja serwera NATS domyślnie przewiduje pliki z nazwą server.
W podanym katalogu pojawiły się pliki server.pem i server-key.pem,
odpowiednio certyfikat i klucz prywatny serwera.
vemmio-ha-deployment $ ./scripts/certs/generate-server.sh
generate-server.sh CERT_DIR HOST NAME
vemmio-ha-deployment $ ./scripts/certs/generate-server.sh local/data/certs/ 192.168.0.42 server
2020/09/25 08:58:31 [INFO] generate received request
2020/09/25 08:58:31 [INFO] received CSR
2020/09/25 08:58:31 [INFO] generating key: rsa-4096
2020/09/25 08:58:34 [INFO] encoded CSR
2020/09/25 08:58:34 [INFO] signed certificate with serial number 518772597694357766370678550156971743194790242489
vemmio-ha-deployment $ ls local/data/certs/
ca.csr ca-key.pem ca.pem config.json csr.json server.csr server-key.pem server.pem
Generowanie kluczy serwera gateway
Skrypt wymaga dwóch parametrów:
- ścieżki do katalogu, w którym istnieją klucze Root CA, klucze serwera NATS oraz zostaną umieszczone wygenerowane klucze,
- nazwa dowolna, która zostanie dodana do nazw plików wygenerowanych kluczy
Nazwy plików wygenerowanych kluczy będzie trzeba wprowadzić
do konfiguracji serwera gateway.
Konfiguracja serwera gateway domyślnie przewiduje pliki z nazwą client.
W podanym katalogu pojawiły się pliki client.pem i client-key.pem,
odpowiednio certyfikat i klucz prywatny serwera.
vemmio-ha-deployment $ ./scripts/certs/generate-client.sh
generate-client.sh CERT_DIR NAME
vemmio-ha-deployment $ ./scripts/certs/generate-client.sh local/data/certs/ client
2020/09/25 09:07:18 [INFO] generate received request
2020/09/25 09:07:18 [INFO] received CSR
2020/09/25 09:07:18 [INFO] generating key: rsa-4096
2020/09/25 09:07:20 [INFO] encoded CSR
2020/09/25 09:07:20 [INFO] signed certificate with serial number 150109343087141795205766740764549877512162544843
2020/09/25 09:07:20 [WARNING] This certificate lacks a "hosts" field. This makes it unsuitable for
websites. For more information see the Baseline Requirements for the Issuance and Management
of Publicly-Trusted Certificates, v.1.1.6, from the CA/Browser Forum (https://cabforum.org);
specifically, section 10.2.3 ("Information Requirements").
vemmio-ha-deployment $ ls local/data/certs/
ca.csr ca-key.pem ca.pem client.csr client-key.pem client.pem config.json csr.json server.csr server-key.pem server.pem
Uruchomienie serwera NATS
Plik konfiguracyjny możemy przekazać przez katalogu /data
a wygenerowane klucze przez katalog /certs.
nats:
image: nats:2.1.7
restart: always
command: --config /data/nats-server.conf
volumes:
- /home/vemmio/data/nats:/data
- /home/vemmio/data/gateway/certs:/certs
ports:
- 4222:4222
logging:
options:
max-size: '1g'
max-file: '1'
W pliku konfiguracyjnym podajemy ścieżki:
tls.ca_file- certyfikat Root CAtls.cert_file- certyfikat serweratls.key_file- klucz prywatny serwera
port: 4222
monitor_port: 8222
tls: {
cert_file: "/certs/server.pem"
key_file: "/certs/server-key.pem"
ca_file: "/certs/ca.pem"
verify: true
timeout: 30
}
Uruchomienie serwera gateway
Wygenerowane klucze przekazujemy przez katalog /certs.
Konfigurację serwera przekazujemy przez flagi:
ca-cert- certyfikat Root CAca-key- klucz prywatny Root CAnats-cert- certyfikat serwera np.client.pemnats-key- klucz prywatny serwera np.client-key.pemnats-addr- adres serwera NATS
Adres serwera NATS podajemy w formacie nats://$ADDR:$PORT
np. nats://192.168.0.42:4222.
gateway:
image: r.vemmio.dev/ha-gateway
restart: always
command: >
/usr/local/bin/serverd
--ca-cert /certs/ca.pem
--ca-key /certs/ca-key.pem
--nats-addr nats://nats:4222
--nats-tls
--nats-cert /certs/client.pem
--nats-key /certs/client-key.pem
--rpc-listen :5001
--rpc-cert /certs/server.pem
--rpc-key /certs/server-key.pem
--api-listen :4001
--certs-listen :3001
--certs-secret bAR6yBEujQV3yo3b3zUd
--certs-cfssl /usr/local/bin/cfssl
--certs-cfssljson /usr/local/bin/cfssljson
--mq-addr amqp://vemmio:secret@rabbitmq:5672
--mq-exchange vemmio-ha-vemmio
--heartbeat-time 10s
--heartbeat-timeout 10s
volumes:
- /home/vemmio/data/gateway/certs:/certs
ports:
- 5001:5001
- 3001:3001
- 10.135.192.201:2001:2112
expose:
- 4001
links:
- mq:rabbitmq
- nats:nats
logging:
options:
max-size: '1g'
max-file: '1'
Przełączenie sprzętu na środowisko lokalne
Logujemy się na sprzęt przez SSH.
Zatrzymujemy kontroler.
Zmieniamy w pliku /etc/init.d/gateway-controller wartość zmiennej INIT_HOST
na adres lokalnego serwera.
Modyfikujemy adres serwera, do którego sprzęt nawiązuje połączenie.
Usuwamy certyfikaty i klucze szyfrowania
Uruchamiamy kontroler.
Po uruchomieniu kontroler powinien wygenerować nowe klucze szyfrowania i podłączyć się do systemu uruchomionego lokalnie.
Przełączenie sprzętu na środowisko deweloperskie
Logujemy się na sprzęt przez SSH.
Zatrzymujemy kontroler.
Zmieniamy w pliku /etc/init.d/gateway-controller wartość zmiennej INIT_HOST
na adres lokalnego serwera.
Modyfikujemy adres serwera, do którego sprzęt nawiązuje połączenie.
Usuwamy certyfikaty i klucze szyfrowania
Uruchamiamy kontroler.
Po uruchomieniu kontroler powinien wygenerować nowe klucze szyfrowania i podłączyć się do systemu na serwerze deweloperskim.
Zdalna aktywacja wsparcia technicznego
Podmienić adres MAC na adres docelowego urządzenia.
cd deployment/app
docker-compose exec gateway serverctl restart -mac 30:EB:1F:07:94:B2 gateway-support
Zdalny reset stanu sieci Z-Wave
Podmienić adres MAC na adres docelowego urządzenia.