Lorawan-stack: рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд╕рд░реНрд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди

рдХреЛ рдирд┐рд░реНрдорд┐рдд 7 рдЬрдире░ 2020  ┬╖  31рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: TheThingsNetwork/lorawan-stack

рд╕рд╛рд░рд╛рдВрд╢


рдЯреАрдЯреАрдПрди рдиреЗрдЯрд╡рд░реНрдХ рд╕рд░реНрд╡рд░, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░ рдФрд░ рдЬреЙрдЗрди рд╕рд░реНрд╡рд░ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЧрд╛рдЗрдбреЛрдВ рдореЗрдВ, рдореБрдЭреЗ рдХреЗрд╡рд▓ ttn-lw-stack рдСрд▓-рдЗрди-рд╡рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рдорд┐рд▓реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ рддреЛ рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред
...

рд╣рдореЗрдВ рдпрд╣ рдХреНрдпреЛрдВ рдЪрд╛рд╣рд┐рдпреЗ ?


рдпрд╣ рдПрдХ рдмрдбрд╝реА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬреЛ рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рд▓рдЪреАрд▓реА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдЧреАред рдЖрдк рдЧреЗрдЯрд╡реЗ рдкрд░ рд╕рднреА 3 рд╕рд░реНрд╡рд░ (NS, AS, рдФрд░ JS) рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдк JS рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рд╕рд░реНрд╡рд░ рд░рдЦрдирд╛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХрдИ рдЧреЗрдЯрд╡реЗ рдХреЗ рдХреЗрдВрджреНрд░реАрдХреГрдд рдФрд░ рджреВрд░рд╕реНрде рдкреНрд░рдмрдВрдзрди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ NS рдФрд░ AS рдХреЛ рдЧреЗрдЯрд╡реЗ рдкрд░ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдкрд░ред
...

рд╡рд╣рд╛рдВ рдкрд╣рд▓реЗ рд╕реЗ рдХреНрдпрд╛ рд╣реИ? рдЕрдм рдЖрдк рдХреНрдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ?


рдЕрднреА рдореИрдВ рдХреЗрд╡рд▓ ttn-lw-stack рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рджреЗрдЦрддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА 3 рд╕рд░реНрд╡рд░ (NS, AS, рдФрд░ JS) рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
...

рдХреНрдпрд╛ рдЪреАрдЬрд╝ рдЫреВрдЯ рд░рд╣реА рд╣реИ? рддреБрдо рдХреНрдпрд╛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реЛ?


рдореИрдВ рдЙрди рд╕рднреА рдХреЛ рдПрдХ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди/рдкреИрдХреЗрдЬ рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдирдПрд╕, рдПрдПрд╕, рдФрд░ рдЬреЗрдПрд╕ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
...

рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ?


рдЗрд╕реЗ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреА рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред
...

рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рдмрдорд┐рдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?


рдЕрднреА рдирд╣реАрдВ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╢рд╛рдпрдж рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдореБрдЭрд╕реЗ рдЕрдзрд┐рдХ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред
...

рд╕рднреА 31 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╕реБрдЭрд╛рд╡ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж @zamashal

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛, рдЖрдк рдШрдЯрдХреЛрдВ рдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рджреЗрдЦреЛ;

$ ttn-lw-stack start --help
Start The Things Stack

Usage:
  ttn-lw-stack start [is|gs|ns|as|js|console|gcs|dtc|qrg|all]... [flags]

рдЬрдм рдпреЗ рд╕реЗрд╡рд╛рдПрдВ рдПрдХ рд╣реА рдХреНрд▓рд╕реНрдЯрд░ рдФрд░ рд╕рдмрдиреЗрдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдВ рддреЛ рдкреНрд░рддрд┐ рдШрдЯрдХ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд╕реНрдкреЙрди рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЕрднреА рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢ рджреЗ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреИрд╕реЗ рдХрд░реЗрдВ;

  • рдПрдХ рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди рдкрд╣рдЪрд╛рди рд╕рд░реНрд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
  • рдПрдХ рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди рдЬреЙрдЗрди рд╕рд░реНрд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
  • рдЧреЗрдЯрд╡реЗ рд╕рд░реНрд╡рд░, рдиреЗрдЯрд╡рд░реНрдХ рд╕рд░реНрд╡рд░ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд░реВрдЯрд┐рдВрдЧ рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдЬреЛ рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ

@johanstokking рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмреИрдХрд▓реЙрдЧ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред рдЗрд╕ рдмреАрдЪ, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдореЗрдВ рдореЗрд░реА рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЕрдХреЗрд▓реЗ рдЬреЙрдЗрди рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд┐рдпрд╛:
ttn-lw-stack start js --cluster.network-server "ns_ip_address" --cluster.application-server "as_ip_address"

рдЬреЛ рдореИрдВ рдирд╣реАрдВ рд╕рдордЭ рд╕рдХрддрд╛ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЬреЙрдЗрди рд╕рд░реНрд╡рд░ рдХреЛ рдХрд┐рд╕ рдкреЛрд░реНрдЯ рдкрд░ Join_Req рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдиреЗрдЯрд╡рд░реНрдХ рд╕рд░реНрд╡рд░ рдкрд░ Join_Ans рднреЗрдЬрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ?

рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдзрдиреНрдпрд╡рд╛рдж!

@zamashal рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ JS рд╕рд░реНрд╡рд░ рд╣реИ рдФрд░ NS рдФрд░ AS рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реИрдВред рддреЛ NS рдФрд░ AS рдореЗрдВ JS рдХреНрд▓рд╕реНрдЯрд░ рдПрдбреНрд░реЗрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред рдпрд╣ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╣реА рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдШрдЯрдХ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдХреНрд▓рд╕реНрдЯрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рд╣реА рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдПрдХ рджреВрд╕рд░реЗ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЬреАрдПрд╕, рдПрдирдПрд╕ рдФрд░ рдПрдПрд╕ рдХреЛ рдХрд┐рдирд╛рд░реЗ рдкрд░ рдФрд░ рдЬреЗрдПрд╕ рдХреЛ рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рддреИрдирд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╢рд╛рдпрдж рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред

рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдкрдХреЛ рд▓реЛрд░рд╛рд╡рди рдмреИрдХрдПрдВрдб рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрдЯрд░рдСрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рднреА рд╕рдорд░реНрдерд┐рдд рд╣реИред рдпрд╣ NS рдХреЛ TLS рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдкрдХреЗ JS рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдпрд╣ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рдЖрддрд╛ рд╣реИ: рдЕрдкрдиреЗ JS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП NS рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдФрд░ рдЕрдкрдиреЗ JS рдХреЛ interop рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ (рджреЗрдЦреЗрдВ --help )ред рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЕрднреА рддрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реИред

рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рдж @johanstokking ! рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рд╕рдордЭрд╛рдпрд╛ рд╣реИ, рдореИрдВ рдЗрд╕ рд╕реЗрдЯрдЕрдк рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдПрдХ рдмрд╛рдд рдореБрдЭреЗ рднреНрд░рдорд┐рдд рдХрд░ рд░рд╣реА рд╣реИред рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рдкрд░, Semtech Join Server рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдСрдкрд░реЗрдмрд┐рд▓рд┐рдЯреА рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВ, рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдЯреАрдЯреАрдПрди рд╕реНрдЯреИрдХ рдХреЗ рдЬреЙрдЗрди рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рди рдХрд┐ рдХреБрдЫ рдмрд╛рд╣рд░реА рдЬреИрд╕реЗ рд╕реЗрдордЯреЗрдХ рдпрд╛ рдЕрдиреНрдпред рдХреНрдпрд╛ рдореБрдЭреЗ рдЕрднреА рднреА configure.yml рдФрд░ example/js.yml рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ рддреЛ рд╡рд╣ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛?

рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдПрдирдПрд╕ рдХреЛ рдмрд╛рд╣рд░реА рдЬреЗрдПрд╕ (рдЙрд░реНрдл, рдЯреАрдЯреАрдПрди рд╕реНрдЯреИрдХ рдХреЗ рдЬреЗрдПрд╕) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╣реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди Join_Req рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЙрдЗрди рд╕рд░реНрд╡рд░ рдХреЗ рдкреЛрд░реНрдЯ 8886 (рдЗрдВрдЯрд░рдСрдк/рдЯреАрдПрд▓рдПрд╕) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдХрдиреЗрдХреНрд╢рди рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЗрдПрд╕ рдЙрд╕ рдмрдВрджрд░рдЧрд╛рд╣ рдкрд░ рд╕реБрди рд░рд╣рд╛ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж!

@zamashal рдпрд╣рд╛рдБ рдореЛрдЯреЗ рддреМрд░ рдкрд░ рд╡реЗ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ;

рд╕рд░реНрд╡рд░ рдЗрдВрдЯрд░рдСрдк рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ

рдЭрдВрдбреЗ рджреЗрдЦреЗрдВ:

      --interop.listen-tls string                                      Address for the interop server to listen on (default ":8886")
      --interop.sender-client-ca.blob.bucket string                    Bucket to use
      --interop.sender-client-ca.blob.path string                      Path to use
      --interop.sender-client-ca.directory string                      OS filesystem directory, which contains sender client CA configuration
      --interop.sender-client-ca.source string                         Source of the sender client CA configuration (static, directory, url, blob)
      --interop.sender-client-ca.url string                            URL, which contains sender client CA configuration

рдЗрдВрдЯрд░рдСрдк рдХрд╛ рдЕрдкрдирд╛ рд╕рдорд░реНрдкрд┐рдд рд╢реНрд░реЛрддрд╛ рд╣реИ рдЬреЛ рдЯреАрдПрд▓рдПрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЬреАрдЖрд░рдкреАрд╕реА рдХреЗ рд╕рдорд╛рди рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЖрдИрдкреА рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╕рдорд░реНрдкрд┐рдд рдЗрдВрдЯрд░рдСрдк рдкреЛрд░реНрдЯ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ 8886) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдкрдХреЛ рдПрдХ рдирд┐рдЬреА CA рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЬрд╛рд░реА рдХрд░реЗред рдЗрдирдХрд╛ рдЙрдкрдпреЛрдЧ NS рджреНрд╡рд╛рд░рд╛ рдХрд┐рдирд╛рд░реЗ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рдЬреЙрдЗрди рд╕рд░реНрд╡рд░ рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдХреНрд▓рд╛рдЗрдВрдЯ CA рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдкреНрд░рддрд┐ NetID рд╣реИред рдЖрдк рдЕрдкрдиреЗ рдирд┐рдЬреА рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рд╣рдореЗрд╢рд╛ NetIDs 000000 рдФрд░ 000001 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рд▓реЛрд░рд╛ рдПрд▓рд╛рдпрдВрд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рд╕реНрд╡рдпрдВ рдПрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

interop.sender-client-ca.source рд╕реЗ directory рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╡рд╣рд╛рдВ config.yml рдбрд╛рд▓реЗрдВ:

# Experimentation
000000: ca-000000.pem

# The Things Network Foundation
#000013: ca-000013.pem

рдЖрдкрдХрд╛ рдирд┐рдЬреА рд╕реАрдП ca-000000.pem ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рддреМрд░ рдкрд░ рдЖрдк рдЯреАрдЯреАрдПрди рдиреЗрдЯрдЖрдИрдбреА рдХреЗ рд▓рд┐рдП рдЯреАрдЯреАрдПрди рдХрд╛ рд╕реАрдП рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд╕ рдЖрдкрдХреЛ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдиреЗрдЯрд╡рд░реНрдХ рд╕рд░реНрд╡рд░ рдЗрдВрдЯрд░рдСрдк рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬ рдЬреИрд╕рд╛ рд╣реИ , рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЛ рдЬреЛ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рд╕реНрдерд╛рдиреАрдп рдЬреЗрдПрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИред рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:

fqdn: 'thethings.example'
port: 8886
protocol: 'BI1.0'
tls:
  root-ca: 'path/to/clientca.pem'
  certificate: 'path/to/clientcert.pem'
  key: 'path/to/clientkey.pem'

рдпрд╣рд╛рдВ, thethings.example рдЖрдкрдХреЗ рдЬреНрд╡рд╛рдЗрди рд╕рд░реНрд╡рд░ рдХрд╛ FQDN рд╣реИ рдФрд░ 8886 рдЙрд╕ listen-tls рдХрд╛ рдкреЛрд░реНрдЯ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ JS рдЗрдВрдЯрд░рдСрдк рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдерд╛ред

рд╕рд╛рде рд╣реА, root-ca (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╡рд┐рдкрд░реАрдд) _server certificate_ рдХрд╛ рд░реВрдЯ CA рд╣реИред рдпрд╣ рд╡рд╣реА рд╕реАрдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рдЫреЛрдбрд╝ рднреА рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдк рдПрдХ рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ (рдпрд╛ рд▓реЗрдЯреНрд╕ рдПрдирдХреНрд░рд┐рдкреНрдЯ) рд╕рд░реНрд╡рд░ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдирдПрд╕ рджреНрд╡рд╛рд░рд╛ рднрд░реЛрд╕рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рджреЛрдиреЛрдВ рддрд░рдл рдбреАрдмрдЧ рд▓реЙрдЧ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ ( log.level=debug ) рдФрд░ рдЖрдкрдХреЛ рдЪреАрдЬреЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЪреАрдЬреЗрдВ рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВред рдЖрдкрдХреЛ рдХрд╛рдордпрд╛рдмреА рдорд┐рд▓реЗ!

рд╕рд╛рде рд╣реА, рдпрджрд┐ рдЖрдк рдпрд╣ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдмреЗрдЭрд┐рдЭрдХ рдЗрд╕рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд▓ рдЕрдиреБрд░реЛрдз рджрд░реНрдЬ рдХрд░реЗрдВред рдЗрд╕реЗ рд╢рд╛рдпрдж рдПрдХ рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рд╕рдВрджрд░реНрдн рдкреГрд╖реНрда рдХреЛ рднреА рдХреБрдЫ рдкреНрд░реЗрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

@johanstokking , рдореИрдВ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЬреИрд╕реЗ рд╣реА рдореБрдЭреЗ рдпрд╣ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛, рдореИрдВ рдЧрд╛рдЗрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реВрдВрдЧрд╛ред рдЖрдкрдХреА рд╕рднреА рдорджрдж рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкрд░реНрдпрд╛рдкреНрдд рдзрдиреНрдпрд╡рд╛рдж рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛!

рдЕрд░реЗ @johanstokking - рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рд╕рд╛рде рд╕рдм рдареАрдХ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдЖрдкрдХреЛ рдЕрдкрдиреА рдкреНрд░рдЧрддрд┐ рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдВ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдпрд╣рд╛рдВ рдЖрдкрдХреЗ рд╕рд╛рде рдирд╡реАрдирддрдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЗрдВрдЯрд░рдСрдк рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдореЗрд░реЗ рдиреЗрдЯрд╡рд░реНрдХ рд╕рд░реНрд╡рд░ рдХреЛ рдбрд┐рдлреЙрд▓реНрдЯ рдкреЛрд░реНрдЯ 8886 рдкрд░ рдЬреЙрдЗрди рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдЕрдкрдиреЗ рдиреЗрдЯрд╡рд░реНрдХ рд╕рд░реНрд╡рд░ рд▓реЙрдЧ рдкрд░ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд░рд╣рддреА рд╣реИ:
error="join-request to join-server error: http post error: Post http://js-server_ip:8886: dial tcp js-server_ip:8886: connect: connection refused"

рдЕрдЧрд░ рдореИрдВ рдЕрдкрдиреЗ рдиреЗрдЯрд╡рд░реНрдХ рд╕рд░реНрд╡рд░ рдХреЛ рдЬреАрдЖрд░рдкреАрд╕реА рд╕рд░реНрд╡рд░ рдХреЗ рдкреЛрд░реНрдЯ 1884 рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдиреЗрдЯрд╡рд░реНрдХ рд╕рд░реНрд╡рд░ рд▓реЙрдЧ рдкрд░ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:
level=error msg="uplink: processing uplink frame error" ctx_id=f046310d-e528-4dd2-9dcb-6d5c8232a799 error="join-request to join-server error: http post error: Post http://js-server_ip:1884: net/http: HTTP/1.x transport connection broken: malformed HTTP response \"\\x00\\x00\\f\\x04\\x00\\x00\\x00\\x00\\x00\\x00\\x05\\x00\\x00@\\x00\\x00\\x03\\x00\\x00\\xff\\xff\""
ttn рд╕реНрдЯреИрдХ рд▓реЙрдЧ рд╕реЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд:
stack_1 | WARN grpc: Server.Serve failed to create ServerTransport: connection error: desc = "transport: http2Server.HandleStreams received bogus greeting from client: \"POST / HTTP/1.1\\r\\nHost: 1\"" namespace=grpc

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдк рдпрд╛ рдХреЛрдИ рдФрд░ рдореБрдЭреЗ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдЬрд╛рдиреЗрдВ рдХрд┐ рдРрд╕реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЖрдкрдХреЗ рдирд┐рд░рдВрддрд░ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рдж!

рдЬреНрд╡рд╛рдЗрди рд╕рд░реНрд╡рд░ рдХреЗрд╡рд▓ https рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред

рдРрд╕рд╛ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ NS DNS рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ js-server_ip рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж @johanstokking! рддреЛ рд╣рд╛рдБ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ docker-compose.yml рдореЗрдВ рдЕрдкрдиреЗ рд╣реЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯ 8886 рдХреЛ рдореИрдк рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдЕрдм рдореИрдВ рдЬрд┐рд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдПрдХ рдЯреАрдПрд▓рдПрд╕ рд╣реИрдВрдбрд╢реЗрдХ рддреНрд░реБрдЯрд┐ рд╣реИ:

tls: failed to verify client's certificate: x509: certificate signed by unknown authority

рдПрдХ рдмрд╛рдд рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЭрдВрдбреЗ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ --tls.insecure-skip-verify рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдЕрднреА рднреА рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдкрд░ рдЬреЛрд░ рджрд┐рдпрд╛ рдФрд░ рдореБрдЭреЗ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рджреАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЕрдкрдиреЗ рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рд╕реНрдЯреИрдХ рдореЗрдВ рдПрдХ рдЦреЛрд▓ рдЦреЛрд▓рд╛ рдФрд░ рдЬрдм рднреА рдореИрдВ рдорд╢реАрди рджреНрд╡рд╛рд░рд╛ рдЙрди рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреЛ /usr/local/share/ca-certificates/ рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ Permission denied рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ --tls.insecure-skip-verify рдзреНрд╡рдЬ рдХреЛ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП рдереА, рд▓реЗрдХрд┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрд▓рдЧ рд╣реЛред рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдЕрдм рдпрд╣ рд╣реИ рдХрд┐ рдбреЛрдХрд░ рдХрдВрдЯреЗрдирд░ рдореБрдЭреЗ рдореЗрд░реЗ рд╕реНрд╡-рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдХреНрдпрд╛ рдореБрдЭреЗ рд╡рд╣рд╛рдВ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ?

рдХреНрдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ CA рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд SenderID рд▓рд┐рдП рдХрд┐рд╕реА CA рджреНрд╡рд╛рд░рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП рдЧрдП рд╣реИрдВ?

рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЙрдЗрди рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ; рд╕рд┐рд╕реНрдЯрдо рдЯреНрд░рд╕реНрдЯ рдпрд╛ рдХреБрдЫ рднреА рдирд╣реАрдВред

рдореИрдВрдиреЗ рдЙрд╕рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рджрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИред
рдореЗрд░реЗ рдкрд╛рд╕ рдореЗрд░реЗ config.yml рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ:

000000: ca-000000.pem
join-servers:
  - file: './example/js.yml'
    join-euis:
    - 'abcd000000000000/16'

рдФрд░ рдлрд┐рд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ js.yml рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛:

fqdn: 'thethings.example'
port: 8886
protocol: 'BI1.0'
tls:
  root-ca: 'path/to/clientca.pem'
  certificate: 'path/to/clientcert.pem'
  key: 'path/to/clientkey.pem'

рдкреНрд░реЗрд╖рдХ рдХреНрд▓рд╛рдЗрдВрдЯ CA рдХреЛ рдЕрднреА рддрдХ рдкреНрд░рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдпрд╛ рдмрджрд▓рдиреЗ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕рд╛ рдХрд░реЗрдВрдЧреЗред рджреЗрдЦреЗрдВ (рдпрд╣рд╛рдВ)[ https://github.com/TheThingsNetwork/lorawan-stack/issues/1818#issuecomment -575534345]ред рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдлрд╝рд╛рдЗрд▓ рд╣реИ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЕрдкрдиреА рд╕реЗрдЯрд┐рдВрдЧ рд╣реИ:

      --interop.sender-client-ca.blob.bucket string                    Bucket to use
      --interop.sender-client-ca.blob.path string                      Path to use
      --interop.sender-client-ca.directory string                      OS filesystem directory, which contains sender client CA configuration
      --interop.sender-client-ca.source string                         Source of the sender client CA configuration (static, directory, url, blob)
      --interop.sender-client-ca.url string                            URL, which contains sender client CA configuration

рддреЛ source рдХреЛ directory рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЖрдк рдЙрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ config.yml рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдбрд╛рд▓рддреЗ рд╣реИрдВред рдпрд╣ рдЗрдВрдЯрд░рдСрдк рдХреЙрдиреНрдлрд┐рдЧ рд╕реЗ рдЕрд▓рдЧ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж @johanstokking! рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдПрдХ рдЕрд▓рдЧ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдореИрдВ рдЕрдВрдд рдореЗрдВ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЗ рдореБрджреНрджреЗ рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓ рдЧрдпрд╛ рдФрд░ рдЕрдм рдЯреАрдЯреАрдПрди-рд╕реНрдЯреИрдХ рдбреАрдмрдЧ рд▓реЙрдЧ рд╕реЗ рдЗрд╕ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯ рд░рд╣рд╛ рд╣реВрдВ (рдореИрдВрдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЪрд╛рдмрд┐рдпреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╡реЗ рд╕рд╣реА рдереЗ):

stack_1      |   INFO Join not accepted                        dev_eui=0000000000000000 error=error:pkg/redis:not_found (entity not found) join_eui=0000000000000000 method=POST namespace=joinserver/interop remote_addr=gateway_ip:49426 request_id=01E1D3PZ63CQ7VNCE5JE8SDC3J url=/
stack_1      |   INFO Request handled                          duration=2.948762ms error=error:pkg/interop:join_req (join-request failed) error_cause=error:pkg/redis:not_found (entity not found) method=POST namespace=interop remote_addr=gateway_ip:49426 request_id=01E1D3PZ63CQ7VNCE5JE8SDC3J status=400 url=/

рдзреНрдпрд╛рди рджреЗрдВ, рдЧреЗрдЯрд╡реЗ_рдЖрдИрдкреА рд╡рд╣ рдЬрдЧрд╣ рднреА рд╣реИ рдЬрд╣рд╛рдВ рдПрдирдПрд╕ рдФрд░ рдПрдПрд╕ рд░рд╣рддреЗ рд╣реИрдВред

рдПрдирдПрд╕ рдбреАрдмрдЧ рд▓реЙрдЧ рдкрд░ рдореИрдВ рдпрд╣реА рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ:

time="2020-02-18T16:36:52-05:00" level=error msg="uplink: processing uplink frame error" ctx_id=ef20804f-13a8-4f7f-b90e-ce279c1e11ea error="join-request to join-server error: response error, code: JoinReqFailed, description: error:pkg/redis:not_found (entity not found)"

рдореИрдВ рдЬреЛ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реВрдВ, рд╡рд╣ рддреНрд░реБрдЯрд┐ рдбреЙрдХрд░-рдХрдВрдкреЛрдЬрд╝ рдХреЗ рдореЗрд░реЗ рд░реЗрдбрд┐рд╕ рдШрдЯрдХ рдХреЗ рдЧрд▓рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░ рд░рд╣реА рд╣реИред рдореИрдВрдиреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдкрд░ рджреЛрдмрд╛рд░рд╛ рдЧреМрд░ рдХрд┐рдпрд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рдореЗрд▓ рдЦрд╛ рд░рд╣рд╛ рд╣реИред рдореЗрд░реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рдерд╛:

volumes:
      - ${DEV_DATA_DIR:-.env/data}/redis:/data

рддреЛ рдореИрдВ рдЖрдЧреЗ рдмрдврд╝ рдЧрдпрд╛ рдФрд░ рдЗрд╕реЗ рдЗрд╕рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛:

volumes:
    - './data/redis:/data'

рдлрд┐рд░, рдореБрдЭреЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧреА рдЬреЛ рдореБрдЭреЗ рд╕реНрдЯреИрдХ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рднреА рдирд╣реАрдВ рджреЗрддреА рд╣реИ:

stack_1      | error:cmd/internal/shared:initialize_identity_server (could not initialize Identity Server)
stack_1      | --- error:pkg/identityserver:db_needs_migration (the database needs to be migrated)
stack_1      | --- pq: database "ttn_lorawan" does not exist

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рдерд╛ рдХрд┐ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЖрд╡рд╢реНрдпрдХ рдерд╛, ./data/redis/ рддрд╣рдд рдореБрдЭреЗ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рд╛рдЗрд▓ ``appendonly.aof`` рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рдерд╛ рдХрд┐ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЖрд╡рд╢реНрдпрдХ рдерд╛, ./data/redis/ рддрд╣рдд рдореБрдЭреЗ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рд╛рдЗрд▓ ``appendonly.aof`` рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИред

рдирд╣реАрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░реЗрдбрд┐рд╕ рдХреЗ рд▓рд┐рдП рдпрд╣ рдареАрдХ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдЬреНрд╡рд╛рдЗрди рд╕рд░реНрд╡рд░ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рд╣реИ?

рдЕрд░реЗ рд╢рд╛рдпрдж рдЗрд╕реАрд▓рд┐рдПред рдЦреИрд░ рдореИрдВрдиреЗ рдЬреЛ рдХреБрдЫ рдХрд┐рдпрд╛ рд╡рд╣ рдзреНрд╡рдЬ --js.join-eui-prefix рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдореИрдВ рдПрдХ рдФрд░ рдореБрджреНрджреЗ рдкрд░ рдлрдВрд╕ рдЧрдпрд╛ рд╣реВрдВ рдЬрд┐рд╕реЗ рдореИрдВ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ: рдЕрдВрдХ 1942

рдХреНрдпрд╛ рдореИрдВ рд░реЗрдбрд┐рд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдкреНрд░рд╛рд░реВрдк рдХреНрдпрд╛ рд╣реИ ? рдЗрд╕рд╕реЗ рдореБрдЭреЗ рдЗрд╕ рдмреАрдЪ рдЕрдиреНрдп рдореБрджреНрджреЗ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓ рд╕рдХрддреА рд╣реИ ..

рдореИрдВ рджреВрд╕рд░реЗ рдореБрджреНрджреЗ рдкрд░ рдбреИрд╢рдмреЛрд░реНрдб рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдбреИрд╢рдмреЛрд░реНрдб рдкрд░ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рдореБрдЭреЗ рдЕрдм рдПрдХ рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИ рдЬреЛ рдХрд╣ рд░рд╣реА рд╣реИ sender unknown рдЬреЛ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдЧреЗрдЯрд╡реЗ рдХреА рдкрд╣рдЪрд╛рди рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВрдиреЗ рдХрдВрд╕реЛрд▓ рд╕реЗ рдЧреЗрдЯрд╡реЗ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА Disconnected рдХрд╣рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЧреЗрдЯрд╡реЗ_рдЖрдИрдкреА рдФрд░ рд╕рд░реНрд╡рд░_рдЖрдИрдкреА рдХрд╛ рдкрддрд╛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рджреЛрдиреЛрдВ рдХреЛ рдЕрднреА рддрдХ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рд╛ред

рдкреНрд░реЗрд╖рдХ рдЕрдЬреНрдЮрд╛рдд рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЕрдВрддрд┐рдо рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдиреЗрдЯрдЖрдИрдбреА рдЖрдкрдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рд╕рд░реНрд╡рд░ рдХреЗ рдиреЗрдЯрдЖрдИрдбреА рдкрд░ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИред рджреЛрдиреЛрдВ рдХреЛ 000000 рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЖрдк ttn-lw-cli end-device set <app-id> <dev-id> --net-id=000000 рд╕рд╛рде рд╕реАрдПрд▓рдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдВрддрд┐рдо рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдиреЗрдЯрдЖрдИрдбреА рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдореЗрд░рд╛ ttn-lw-cli рдЕрдЬреАрдм рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдореИрдВ рдХреЗрд╡рд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рд▓реЙрдЧрд┐рди рдХрдорд╛рдВрдб рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдФрд░ рдЕрдЧрд░ рдореИрдВ рдХреБрдЫ рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ permission denied ред рдореИрдВрдиреЗ chmod рдХреЛ рдмрджрд▓рдХрд░ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрдИ рддрд░реАрдХреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдореБрдЭреЗ permission denied рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрд╛ред рдЕрдЧрд░ рдореИрдВ рдХреЗрд╡рд▓ ttn-lw-cli login рдЯрд╛рдЗрдк рдХрд░рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдорд┐рд▓рддрд╛ рд╣реИ:

Post https://localhost:8885/oauth/token: x509: certificate signed by unknown authority

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдбреЙрдХрд░-рдХрдВрдкреЛрдЬрд╝ рдЕрдк рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд┐рдирд╛ рдареАрдХ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдХрд┐рд╕реА рднреА рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдореБрдЭреЗ рдХреНрдпрд╛ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ рдЬреЛ рд╕рдВрднрд╡рддрдГ рдЕрдиреБрдорддрд┐рдпреЛрдВ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ?
рдзрдиреНрдпрд╡рд╛рдж!

рдХреНрдпрд╛ рдЖрдк рдЕрдкрдирд╛ рд╕рд░реНрд╡рд░ рдФрд░ рд╕реАрдПрд▓рдЖрдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рдореИрдВ рдХреЗрд╡рд▓ sudo ttn-lw-cli login рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рдерд╛, рдпрд╣рд╛рдВ рдореЗрд░реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИ:

# sudo ttn-lw-cli config
                         --allow-unknown-hosts="false"
                  --application-server-enabled="true"
             --application-server-grpc-address="localhost:8884"
                                          --ca=""
                                      --config="/etc/ttn-cli/.ttn-lw-cli.yml,/root/snap/ttn-lw-stack/149/.ttn-lw-cli.yml,/root/snap/ttn-lw-stack/149/.config/.ttn-lw-cli.yml"
                              --credentials-id=""
         --device-claiming-server-grpc-address="localhost:8884"
      --device-template-converter-grpc-address="localhost:8884"
                      --gateway-server-enabled="true"
                 --gateway-server-grpc-address="localhost:8884"
                --identity-server-grpc-address="localhost:8884"
                                --input-format="json"
                                    --insecure="false"
                         --join-server-enabled="true"
                    --join-server-grpc-address="localhost:8884"
                                   --log.level="info"
                      --network-server-enabled="true"
                 --network-server-grpc-address="localhost:8884"
                        --oauth-server-address="https://localhost:8885/oauth"
                               --output-format="json"
              --qr-code-generator-grpc-address="localhost:8884"

рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдореБрдЭреЗ certificate signed by unknown authority рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЗ рдореБрджреНрджреЛрдВ рдХреЗ рдХрд╛рд░рдг, рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛: sudo ttn-lw-cli login --ca "path/to/ca.pem" рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдореБрдЭреЗ рдПрдХ рдЕрдиреБрдорддрд┐ рдЕрд╕реНрд╡реАрдХреГрдд рддреНрд░реБрдЯрд┐ рдорд┐рд▓реАред

рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛: sudo ttn-lw-cli login --ca "path/to/ca.pem"

рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВ рднреА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдореБрдЭреЗ рдПрдХ рдЕрдиреБрдорддрд┐ рдЕрд╕реНрд╡реАрдХреГрдд рддреНрд░реБрдЯрд┐ рджреАред

рд╕реАрдПрд▓рдЖрдИ рдпрд╛ рд╕рд░реНрд╡рд░ рдкрд░? рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд▓реЙрдЧ рд╣реИрдВ?

рд╕рд░реНрд╡рд░ рддреНрд░реБрдЯрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ? рдпрд╣ рд╕рдм рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдБ:

root<strong i="6">@myserver</strong>:/etc/ttn-cli# sudo ttn-lw-cli login --ca="/etc/ttn-cli/ca.pem" --log.level="debug"
open /etc/ttn-cli/ca.pem: permission denied

рдореИрдВрдиреЗ рдЗрд╕реЗ chmod 777 рдЕрдиреБрдорддрд┐рдпрд╛рдВ рджреЗрдиреЗ рдХрд╛ рднреА рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдФрд░ рдЕрднреА рднреА рд╡рд╣реА рддреНрд░реБрдЯрд┐ рд╣реЛ рд░рд╣реА рд╣реИ ..

рдореИрдВ рдЕрдВрдд рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЛ /root/snap/ttn-lw-stack/149/.ttn-lw-cli.yml рдЬреЛрдбрд╝рдХрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛!

рдореБрдЭреЗ рдЕрдм certificate signed by unknown authority рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИред ttn-lw-cli рдЯреВрд▓ рдХрд┐рд╕реА рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкрд░ рдХреИрд╕реЗ рднрд░реЛрд╕рд╛ рдХрд░рддрд╛ рд╣реИ? рдпрд╣рд╛рдБ рдкреВрд░рд╛ рд▓реЙрдЧ рд╣реИ:

root<strong i="8">@localhost</strong>:/etc/ttn-stack# sudo ttn-lw-cli login --callback=false --config="/root/snap/ttn-lw-stack/149/.ttn-lw-cli.yml" --log.level="debug" --insecure="true" --allow-unknown-hosts="true" --ca="/root/snap/ttn-lw-stack/149/ca.pem"
  WARN Access token expired at 5:17PM
 ERROR Please login with the login command
 DEBUG ccResolverWrapper: sending update to cc: {[{localhost:1884  <nil> 0 <nil>}] <nil> <nil>}
 DEBUG pickfirstBalancer: HandleSubConnStateChange: 0xc00087caa0, {CONNECTING <nil>}
 DEBUG pickfirstBalancer: HandleSubConnStateChange: 0xc00087caa0, {READY <nil>}
 DEBUG Finished unary call                      duration=2.376756ms grpc_method=AuthInfo grpc_service=ttn.lorawan.v3.EntityAccess namespace=grpc
  INFO Opening your browser on https://localhost/oauth/authorize?client_id=cli&redirect_uri=code&response_type=code
  WARN Could not open your browser, you'll have to go there yourself error=fork/exec /usr/bin/xdg-open: permission denied
  INFO After logging in and authorizing the CLI, we'll get an access token for future commands.
  INFO Please paste the authorization code and press enter
> MF2XI.JX2QFUHNVVWMEYTTRQ3S4DTGPI5VXBYJWVJQ2ZI.OG5C4HQXGMRQ4LVW7ES4IZRNH2L5OJOING2SWOW74LFLQAYDH64Q
 ERROR Could not exchange OAuth access token    error=Post https://localhost/oauth/token: x509: certificate signed by unknown authority
Post https://localhost/oauth/token: x509: certificate signed by unknown authority

рдореИрдВ рдЙрд╕реА ca.pem рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рд╕ рдкрд░ ttn-stack рджреНрд╡рд╛рд░рд╛ рднрд░реЛрд╕рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ docker-compose рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рддрд╛ рд╣реВрдВред

рдореИрдВрдиреЗ ttn-lw-cli рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдореЗрдВ http URI рдФрд░ http рдкреЛрд░реНрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд┐рд░ рд╕реЗ рд▓реЙрдЧрд┐рди/рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред рдЬрдм рдореИрдВ sudo ttn-lw-cli end-device set "mysensor1app" "mysensor1dev" --net-id=000000 --log.level="debug" рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдирд┐рдореНрди рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ:

root<strong i="8">@localhost</strong>:/etc/ttn-stack$ sudo ttn-lw-cli end-device set "mysensor1app" "mysensor1dev" --net-id=000000 --log.level="debug"
 DEBUG Using access token (valid until 6:42PM)
 DEBUG ccResolverWrapper: sending update to cc: {[{localhost:1884  <nil> 0 <nil>}] <nil> <nil>}
 DEBUG pickfirstBalancer: HandleSubConnStateChange: 0xc000414730, {CONNECTING <nil>}
  WARN grpc: addrConn.createTransport failed to connect to {localhost:1884  <nil> 0 <nil>}. Err :connection error: desc = "transport: authentication handshake failed: context deadline exceeded". Reconnecting...
 DEBUG pickfirstBalancer: HandleSubConnStateChange: 0xc000414730, {TRANSIENT_FAILURE connection error: desc = "transport: authentication handshake failed: context deadline exceeded"}
 DEBUG pickfirstBalancer: HandleSubConnStateChange: 0xc000414730, {CONNECTING <nil>}
  WARN grpc: addrConn.createTransport failed to connect to {localhost:1884  <nil> 0 <nil>}. Err :connection error: desc = "transport: authentication handshake failed: context deadline exceeded". Reconnecting...

рдпрд╣рд╛рдБ рдореЗрд░реА ttn-lw-cli рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ:

                         --allow-unknown-hosts="true"
                  --application-server-enabled="true"
             --application-server-grpc-address="localhost:1884"
                                          --ca="/root/snap/ttn-lw-stack/149/ca.pem"
                                      --config="/etc/ttn-stack/.ttn-lw-cli.yml,/root/snap/ttn-lw-stack/149/.ttn-lw-cli.yml,/root/snap/ttn-lw-stack/149/.config/.ttn-lw-cli.yml"
                              --credentials-id=""
         --device-claiming-server-grpc-address="localhost:1884"
      --device-template-converter-grpc-address="localhost:1884"
                      --gateway-server-enabled="true"
                 --gateway-server-grpc-address="localhost:1884"
                --identity-server-grpc-address="localhost:1884"
                                --input-format="json"
                                    --insecure="true"
                         --join-server-enabled="true"
                    --join-server-grpc-address="localhost:1884"
                                   --log.level="info"
                      --network-server-enabled="true"
                 --network-server-grpc-address="localhost:1884"
                        --oauth-server-address="http://localhost/oauth"
                               --output-format="json"
              --qr-code-generator-grpc-address="localhost:1884"

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░реЗ http рд╕реЗрдЯрдЕрдк рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рд▓реЙрдЧрд┐рди рдХреЗ рдмрд╛рдж INFO Got OAuth access token рд╕рдВрджреЗрд╢ рдерд╛ рдЬреЛ рд╕рдлрд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рдЕрдкрдиреЗ docker-compose рд▓реЙрдЧ рд╕реЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рднреА рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧреА:

stack_1      |  DEBUG Rejected authentication                  client_id=mqtt_5bc528ca.ae4ea8 error=error:pkg/ttnpb:identifiers (invalid identifiers) error_cause=error:pkg/errors:validation (invalid `application_id`: value does not match regex pattern "^[a-z0-9](?:[-]?[a-z0-9]){2,}$") field=application_id name=ApplicationIdentifiersValidationError namespace=applicationserver/io/mqtt reason=value does not match regex pattern "^[a-z0-9](?:[-]?[a-z0-9]){2,}$" username=
stack_1      |   WARN Failed to setup connection               error=error:pkg/ttnpb:identifiers (invalid identifiers) error_cause=error:pkg/errors:validation (invalid `application_id`: value does not match regex pattern "^[a-z0-9](?:[-]?[a-z0-9]){2,}$") field=application_id name=ApplicationIdentifiersValidationError namespace=applicationserver/io/mqtt reason=value does not match regex pattern "^[a-z0-9](?:[-]?[a-z0-9]){2,}$" remote_addr=172.18.0.1:57472

рдореИрдВ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛рдпрд╛ рдХрд┐ рдпрд╣ рдХрд┐рд╕рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдпрд╣ рдЙрд╕реА рдбрд┐рд╡рд╛рдЗрд╕ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЬреЛрдбрд╝рд╛ рд╣реИ рдФрд░ рдЕрднреА рднреА рд╕реЗрдВрд╕рд░ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред

рдореБрдЭреЗ рдЕрдм certificate signed by unknown authority рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИред ttn-lw-cli рдЯреВрд▓ рдХрд┐рд╕реА рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкрд░ рдХреИрд╕реЗ рднрд░реЛрд╕рд╛ рдХрд░рддрд╛ рд╣реИ?

рдпрд╣ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкрд╛рд╕ рдХреА рдЧрдИ CA рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ ca ред рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдпрд╛ рддреЛ рд╕рд░реНрд╡рд░ рдкреНрд░рдорд╛рдгрдкрддреНрд░ (рдпрджрд┐ рдпрд╣ рд╕реНрд╡-рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╣реИ) рдпрд╛ рд╕рд░реНрд╡рд░ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ CA рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣рд╛рдБ рдореЗрд░реА ttn-lw-cli рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ:

рдпрджрд┐ рдЖрдк TLS рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЕрдЪреНрдЫрд╛ рджрд┐рдЦрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдХреНрдпрд╛ рд╕рд░реНрд╡рд░ рдЗрди рдкрддреЛрдВ рдкрд░ рдЕрдкрдиреЗ рдЧреИрд░-рдЯреАрдПрд▓рдПрд╕ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╕реБрди рд░рд╣рд╛ рд╣реИ?

рдореБрдЭреЗ рдЕрдкрдиреЗ docker-compose рд▓реЙрдЧ рд╕реЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рднреА рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧреА:

рдпрд╣ рдПрдХ MQTT рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реИ рдЬреЛ рдПрдХ рдРрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рд╕реЗ рдЬреБрдбрд╝ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдорд╛рдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрдИрдбреА рдирд╣реАрдВ рд╣реИред

рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ cert.pem рдХреЗ рдмрдЬрд╛рдп ca.pem рд╣рд▓ certificate signed by unknown authority рдореБрджреНрджрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдЕрднреА рднреА рдЕрдиреНрдп рдХрдиреЗрдХреНрд╢рди рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИред рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреЛрд░реНрдЯ 1884 рдкрд░ рд╕реБрди рд░рд╣рд╛ рд╣реВрдВ:

user<strong i="10">@localhost</strong>:/etc/ttn-stack$ sudo netstat -tulpn | grep LISTEN
tcp6       0      0 :::1884                 :::*                    LISTEN      18793/docker-proxy

рдЬрдм рдореИрдВ 1884 рдкреЛрд░реНрдЯ рдкрд░ рдЯреЗрд▓рдиреЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ ttn-lw-cli рдЯреВрд▓ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдбреЗрдЯрд╛ рдкреИрдХреЗрдЯ рднреА рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВред рддреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреИрдХреЗрдЯ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбреАрдмрдЧ рд▓реЙрдЧ рдЕрднреА рднреА рдореБрдЭреЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ: "transport: authentication handshake failed: context deadline exceeded". Reconnecting...

рдореИрдВрдиреЗ рдЕрдВрддрддрдГ --insecure рдзреНрд╡рдЬ рдХреЛ end-device set рдХрдорд╛рдВрдб рдореЗрдВ рдЬреЛрдбрд╝рдХрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ !! рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЯреАрдПрд▓рдПрд╕ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдм рд╡реИрд╕реЗ рднреА рдЪрд┐рдВрддрд┐рдд рдирд╣реАрдВ рд╣реВрдВ
рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдзрдиреНрдпрд╡рд╛рдж!

рдореИрдВ рдЖрдкрдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд░реЛрдорд╛рдВрдЪрд┐рдд рд╣реВрдБ --root-keys.app-key.key рдХреЗ рдЕрд▓рд╛рд╡рд╛ --net-id , рдХреЗ рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ end-device рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ рдФрд░ рдореИрдВ рд╕реНрд╡рддрдВрддреНрд░ рдкрд░ рдЕрдВрдд рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдЖрдиреЗ рд╢реБрд░реВ рд╣реЛ рдЧрдП рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рд░реНрд╡рд░! рдореИрдВрдиреЗ рдЬрд┐рди рд╕рднреА рдореБрджреНрджреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рд╣реИ, рдЙрдирдХреЗ рд▓рд┐рдП рдЖрдкрдХреА рдорд╣рд╛рди рдорджрдж рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рдж!

рдПрдХ рджрдо рдмрдврд╝рд┐рдпрд╛! рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдпрд╣рд╛рдВ рдЕрдкрдиреЗ рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд░ рд╕рдХреЗрдВ, рддрд╛рдХрд┐ рд╣рдо рдЗрд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХреЗрдВред

рдкреНрд░реЗрд░рдгрд╛ рдФрд░ рдкрд╣рд▓рд╛ рдкреИрдирдХреЗрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдзрдиреНрдпрд╡рд╛рджред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

kschiffer picture kschiffer  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

johanstokking picture johanstokking  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ecities picture ecities  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

htdvisser picture htdvisser  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ZeroSum24 picture ZeroSum24  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ