torstai 23. joulukuuta 2021

Telia 6rd IPv6 putken konffaus pfSense palomuuriin

Telian tarjoma 6rd putken asetukset on tarjolla Option-212 parametrissä DHCP4 vastauksen mukana. Esim Asuksen RT-purkit osaa suoraan konffata 6rd putken dhcp option-212 vastauksen pohjalta, mutta pfSense palomuuri ei osaa kyseistä kenttää kysyä ja parsia ainakaan nykyisessä firmiksessä. Mutta pienoisella manuaalityöllä sekin tieto on kyllä kaiveltavissa.

Ensin pitää enabloida ssh shelli "System / Advanced / Admin Access / Enable Secure Shell" ja loggaa roottina palomuurin sisälle.

Luo filesysteemiin kaksi tiedostoa (esim. vi-editorilla):

/etc/dhclient.script && chmod a+x /etc/dhclient.script
#!/bin/sh
echo $new_option_212 >/tmp/6rd-212.log
/etc/dhclient.conf
request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-name-servers, host-name, option-212;
script "/etc/dhclient.script";
Jonka jälkeen voimme sivusta kutsua dhcpclienttia joka kysyy option-212sen operaattorilta (minulla WAN on igb0).
# dhclient -c /etc/dhclient.conf igb0
# cat /tmp/6rd-212.log
e:26:20:1:20:3:f4:0:0:0:0:0:0:0:0:0:0:0:54:fb:ff:fe
Tästä logirivistä saamme tarvittavat 6rd parametrit yhteyden luomiseksi. Lisätietoa: https://datatracker.ietf.org/doc/html/rfc5969#section-7.1.1 (hex-to-decimal konversio seuraaville kentille: 1,2,19,20,21,22)
e:26:20:1:20:3:f4:0:0:0:0:0:0:0:0:0:0:0:54:fb:ff:fe
0x0e    = 14               (6RD IPv4 Prefix length)
0x26    = 38               (6RD Prefix mask)
0x20... = 2001:2003:f400:: (6RD Prefix)
0x54... = 84.251.255.254   (6RD Border relay)
DHCP palauttaa aina julkisen ipv4 osoitteen pohjalta hieman eri arvot, mutta tuota seuraamalla voit laskea omasta replystäsi tarvitsemasi arvot. Ja pistää ne pfSensen 6rd asetuksiin WAN interfaceen.

Sen lisäksi kävin muuttamassa Monitor IP:n osoittamaan googlen IPv6 nimipalvelinta, niin pystyy paremmin seuraamaan, että onko interface pystyssä.

Tuon kaiken jälkeen ping6 testit toimii iloisesti ja halutessaan voi lisätä vielä IPv6 osoitteen vaikka LAN interfaceen. Valitsemalla "IPv6 Configuration Type":n arvoksi "Track Interface" ja valitaan WAN trackattavaksi interfaceksi. Sekä voit halutessasi tarjota IPv6 osoitteita myös LAN verkollesi.

Ubiquitin Edgerouterille löytyy myös 6rd ohjeistus täältä: https://github.com/kauppine/edgerouter-telia6rd

tiistai 20. heinäkuuta 2021

Home Assistant - Gluehome lukkointegraatio

Olen aikaisemmin Glue-lukko aihetta jo sivunnut aikaisemmassa blogipostauksessa: http://omakotikotitalomme.blogspot.com/2019/09/glue-alylukon-rajapintojen-tutkimista.html

Keväällä Glue muutti mobile applikaation kokonaan ja vanha API urli lakkasi toimimasta. Nopeasti vilkaisin uuden appiksenkin sisälle, ja siellä oli https://mobile.gluehome.com/api/ urli käytössä ja nopealla vilkaisulla löytyi myös mqtt broker hittejä, mikä olisi lupaavaa, jos semmoinen rajapinta joskus aukeasti. Mutta onneksi ei tarvinnut ruveta tarkemmin appiksen toimintaa penkomaan, kun internetistä löytyi uusi semi-official API, kun Homebridgelle oli julkaistu toteutus GlueHome integraatioille (https://github.com/GlueHome/homebridge-plugin). Joten samaa esimerkkiä seuraten voi curlilla tai HA:lla lukkoa komentaa.

# Create/fetch <api-key> with glue <user>:<pass> according to plugin README:
curl --location --request POST 'https://user-api.gluehome.com/v1/api-keys' --header 'Content-Type: application/json' -u <user>:<pass> --data-raw '{ "name": "My Test Key", "scopes": ["events.read", "locks.read", "locks.write"] }'

# Fetch <lock-id> using created <api-key>
curl -L -H "Authorization: Api-Key <api-key>"  https://user-api.gluehome.com/v1/locks

# Test operation <op>=lock/unlock on <lock-id> 
curl -L -H "Authorization: Api-Key <api-key>" -H 'Content-Type: application/json' -d '{"type":"<op>"}' https://user-api.gluehome.com/v1/locks/<lock-id>/operations

Ylläolevilla esimerkeillä voi testata lukon toimintaa, ja samalla voit luoda/pistää talteen oman lukkosi <api-key> ja <lock-id>. Niitä tarvitaan Home Assistantin puolella kun editoit secrets.yaml ja configuration.yaml tiedostoja.

secrets.yaml:
glue_command_on: "curl -L -H 'Authorization: Api-Key ApiAvain' -H 'Content-Type: application/json' -d '{\"type\":\"lock\"}' https://user-api.gluehome.com/v1/locks/123456/operations"
glue_command_off: "curl -L -H 'Authorization: Api-Key ApiAvain' -H 'Content-Type: application/json' -d '{\"type\":\"unlock\"}' https://user-api.gluehome.com/v1/locks/123456/operations"

glue_resource: "https://user-api.gluehome.com/v1/locks/123456"
glue_auth: "Api-Key ApiAvain"
configuration.yaml:
switch varasto_ovi:
- platform: command_line
  switches:
    varasto_lock:
      friendly_name: "Varaston Ovi"
      command_on: !secret glue_command_on
      command_off: !secret glue_command_off
sensor varaston_ovi:
  - platform: rest
    resource: !secret glue_resource
    name: varasto_lock
    method: GET
    headers:
      Authorization: !secret glue_auth
    json_attributes:
      - description
      - batteryStatus
      - lastLockEvent
      - connectionStatus
    value_template: "OK"
  - platform: template
    sensors:
      varasto_lock_last_event:
        friendly_name: Last varasto lock event
        value_template: "{{ state_attr('sensor.varasto_lock', 'lastLockEvent')['eventType'] }}"
      varasto_lock_battery:
        friendly_name: Varasto lock battery
        value_template: "{{ state_attr('sensor.varasto_lock', 'batteryStatus') }}"

Ja HA:n restartin jälkeen lukko löytyy switchinä Overview näytöllä;