Przejdź do treści

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 CA
  • tls.cert_file - certyfikat serwera
  • tls.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 CA
  • ca-key - klucz prywatny Root CA
  • nats-cert - certyfikat serwera np. client.pem
  • nats-key - klucz prywatny serwera np. client-key.pem
  • nats-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.

ssh root@192.168.0.13

Zatrzymujemy kontroler.

/etc/init.d/gateway-controller stop

Zmieniamy w pliku /etc/init.d/gateway-controller wartość zmiennej INIT_HOST na adres lokalnego serwera.

INIT_HOST=192.168.0.42

Modyfikujemy adres serwera, do którego sprzęt nawiązuje połączenie.

uci set gateway-controller.connector.server=nats://192.168.0.42:4222
uci commit gateway-controller

Usuwamy certyfikaty i klucze szyfrowania

rm /etc/gateway-controller/*.pem

Uruchamiamy kontroler.

/etc/init.d/gateway-controller start

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.

ssh root@192.168.0.13

Zatrzymujemy kontroler.

/etc/init.d/gateway-controller stop

Zmieniamy w pliku /etc/init.d/gateway-controller wartość zmiennej INIT_HOST na adres lokalnego serwera.

INIT_HOST=vemmio.dev

Modyfikujemy adres serwera, do którego sprzęt nawiązuje połączenie.

uci set gateway-controller.connector.server=nats://vemmio.dev:4222
uci commit gateway-controller

Usuwamy certyfikaty i klucze szyfrowania

rm /etc/gateway-controller/*.pem

Uruchamiamy kontroler.

/etc/init.d/gateway-controller start

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.

cd deployment/app
docker-compose exec gateway serverctl zwave reset -mac 30:EB:1F:07:94:B2