Vinnaren i pepparkakshustävlingen!
2018-06-09, 19:14
  #1
Medlem
Bleppe_Bfs avatar
Har några services som är beroende av att de kan namnupplösas vid hostnamn. openvpn, openldap och ssh, (för rsync) och skall startas vid init. Problemet är att hosten i intranätet samt vpn servern bägge har bindestreck (dash) "-" i sitt namn. Detta översätter systemd (systemctl) från - till \.

Säg att de heter intra-server och vpn-server.
De försöker den anropa till namnuppslagningen för intra\server och vpn\server innan den failar.

Har försökt att citera hostnamnen, har försökt med ett \ samt / före och efter strecket som escape character.
Har till och med gjort dem till variabler och anropat dem som $VPN och $INTRA men det blir alltid intra\server och vpn\server.

Visst måste det gå att ha ett bindestreck i hostnamnet om man skall ha en vpn förbindelse mellan två platser?
Citera
2018-06-09, 21:05
  #2
Medlem
Citat:
Ursprungligen postat av Bleppe_Bf
Har några services som är beroende av att de kan namnupplösas vid hostnamn. openvpn, openldap och ssh, (för rsync) och skall startas vid init. Problemet är att hosten i intranätet samt vpn servern bägge har bindestreck (dash) "-" i sitt namn. Detta översätter systemd (systemctl) från - till \.

Säg att de heter intra-server och vpn-server.
De försöker den anropa till namnuppslagningen för intra\server och vpn\server innan den failar.

Har försökt att citera hostnamnen, har försökt med ett \ samt / före och efter strecket som escape character.
Har till och med gjort dem till variabler och anropat dem som $VPN och $INTRA men det blir alltid intra\server och vpn\server.

Visst måste det gå att ha ett bindestreck i hostnamnet om man skall ha en vpn förbindelse mellan två platser?
Ja, hostnamn får lov att innehålla bindestreck.

Jag har aldrig stött på problemet själv, men det ser ut som att systemd använder bindestreck i sina egna escape-sekvenser, vilket möjligen skulle kunna vara orsaken till ditt problem. I så fall skall du använda kommandot 'systemd-escape' för att själv mangla dina strängar. "intra-server" blir "intra\x2dserver" efter mangling.

Vet inte om det hjälper, men kan vara värt att försöka.
Citera
2018-06-09, 21:09
  #3
Moderator
vhes avatar
Var, exakt, står hostnamnen? Är de service-namn eller vad? Det är ju knappast så att alla namnuppslagningar med bindestreck i sig går sönder, ens i den Lennartska världen.
Citera
2018-06-09, 22:36
  #4
Moderator
vhes avatar
Rubrik ändrad.

Utgående rubrik: Systemd tolkar om hostnamn till regex?
Ny rubrik: Systemd tolkar om hostnamn?

Något regular expression ser inte ut att vara involverat, och så termen förvirrar mest. TS får gärna kontakta mig med förslag på bättre rubrik om så önskas.

/Moderator
Citera
2018-06-09, 23:59
  #5
Medlem
Bleppe_Bfs avatar
Citat:
Ursprungligen postat av vhe
Var, exakt, står hostnamnen? Är de service-namn eller vad?

Jo precis. systemctl start (servicenamn)@(hostnamn).service

Citat:
Ursprungligen postat av vhe
Det är ju knappast så att alla namnuppslagningar med bindestreck i sig går sönder, ens i den Lennartska världen.

Namnuppslagningen i sig funkar ju. Kan pinga bägge vid namn, men i kombination med systemd så blir det en annan femma.

Tar vi exemplet med systemd-escape så blir hostnamnet "vpn-server" till "vpn\x2dserver" (well obviously!) .

Frågan är då om jag bara kan använda den strängen i anropet eller om jag måste köra någon knökig echo-sats för anropet.

Typ

systemctl enable openvpn-client@`echo "$( systemd-escape 'vpn-server' ).service"`

Får fortsätta med det här på Tisdag.
Tack för snabba svar om inget annat
Citera
2018-06-10, 09:06
  #6
Moderator
vhes avatar
Citat:
Ursprungligen postat av Bleppe_Bf
Jo precis. systemctl start (servicenamn)@(hostnamn).service



Namnuppslagningen i sig funkar ju. Kan pinga bägge vid namn, men i kombination med systemd så blir det en annan femma.

Tar vi exemplet med systemd-escape så blir hostnamnet "vpn-server" till "vpn\x2dserver" (well obviously!) .

Frågan är då om jag bara kan använda den strängen i anropet eller om jag måste köra någon knökig echo-sats för anropet.

Typ

systemctl enable openvpn-client@`echo "$( systemd-escape 'vpn-server' ).service"`

Får fortsätta med det här på Tisdag.
Tack för snabba svar om inget annat

Verkar vara ungefär samma problem som pratas om här: https://github.com/systemd/systemd/issues/3788

Där verkar ju lösningen i slutändan ha varit på C-nivå, att inte escape:a unit-namnet, men jag funderar på om ditt problem inte ligger i service-filen själv. Se tabellen under https://access.redhat.com/documentat...antiated_Units, det är inte så att service-filen gör nån magi och refererar till %I istället för %i när den startar openvpn?
Citera
2018-06-16, 17:01
  #7
Medlem
Bleppe_Bfs avatar
Citat:
Ursprungligen postat av vhe
Verkar vara ungefär samma problem som pratas om här: https://github.com/systemd/systemd/issues/3788

Där verkar ju lösningen i slutändan ha varit på C-nivå, att inte escape:a unit-namnet, men jag funderar på om ditt problem inte ligger i service-filen själv. Se tabellen under https://access.redhat.com/documentat...antiated_Units, det är inte så att service-filen gör nån magi och refererar till %I istället för %i när den startar openvpn?

Nej jag kunde lösa det någorlunda med hjälp av att peka på det mystiska hostnamnet i själva conf filen.

Det verkar vara löst om än baklänges. Webbservern i intranätet bakom DMZ kan nu pinga och köra netcat på port 80 och 443 till klienten utanför, den går då genom genom tre brandväggar, fyra om man räknar med tunneln.
Åt andra hållet kan klienten bara pinga tunneln.

Lennartska världen kan vänta, Murphy lag gäller dock redan här.
SystemD tolkar inte om hostnamn specifikt men kan av säkerhetsskäl(?) bara hantera ett begränsat antal specialtecken.

Tråden kan låsas.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback