Page 1 of 1

API geht via IPv6, aber nicht via IPv4

Posted: Sun 23. Jan 2022, 12:48
by 24unix
Moin,

Problem wie im Titel genannt.

Bei 2 Servern kann ich die API nicht per IPv4 erreichen.
timeout.png
An der CLI reproduzierbar:

Code: Select all

$ curl https://tector.24unix.net/api/v2/ping -H "X-Api-Key: HJwrfMd7.A[..]K7jZ"
{
    "response": "pong"
}

Code: Select all

$ curl -4 https://tector.24unix.net/api/v2/ping -H "X-Api-Key: HJwrfMd7.A[..]K7jZ"
curl: (28) Failed to connect to tector.24unix.net port 443: Connection timed out

Aber ICMP Ping geht:

Code: Select all

$ ping tector
PING tector(tector.24unix.net (2a01:4f8:161:12cd::137)) 56 data bytes
64 bytes from tector.24unix.net (2a01:4f8:161:12cd::137): icmp_seq=1 ttl=64 time=0.170 ms

$ ping -4 tector
PING  (176.9.165.137) 56(84) bytes of data.
64 bytes from tector.24unix.net (176.9.165.137): icmp_seq=1 ttl=64 time=0.285 ms
Mit Lynx kann ich die Seite auch von dem Server erreichen.

Apache sieht gut aus:

Code: Select all

apache2ctl -S
VirtualHost configuration:
*:443                  is a NameVirtualHost
         default server tector.24unix.net (/etc/apache2/keyhelp/keyhelp.conf:20)
         port 443 namevhost tector.24unix.net (/etc/apache2/keyhelp/keyhelp.conf:20)

läuft auch:

Code: Select all

$ netstat -luntep|grep 443
tcp6       0      0 :::443                  :::*                    LISTEN      0          2203674    306200/apache2
Hat jemand eine schlaue Idee, wo ich da suchen könnte?

Re: API geht via IPv6, aber nicht via IPv4

Posted: Sun 23. Jan 2022, 13:08
by OlliTheDarkness
Ich fang mal ganz klein an.

Die 4er Addr. in der FW gelandet, zB. wegen zu vieler fehlerhafter API Logins ?!

Wäre die erste und einfachste Annahme.

Re: API geht via IPv6, aber nicht via IPv4

Posted: Sun 23. Jan 2022, 13:11
by 24unix
OlliTheDarkness wrote: Sun 23. Jan 2022, 13:08 Ich fang mal ganz klein an.

Die 4er Addr. in der FW gelandet, zB. wegen zu vieler fehlerhafter API Logins ?!

Wäre die erste und einfachste Annahme.
Stimmt, der Gedanke ist nicht verkehrt, aber sieht nicht so aus:

Code: Select all

(ssh) root@tector : ~
[2] # iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination
f2b-sshd   tcp  --  anywhere             anywhere             multiport dports ssh
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
DROP       all  --  anywhere             anywhere             state INVALID
DROP       tcp  --  anywhere             anywhere             tcp flags:FIN,SYN,RST,PSH,ACK,URG/NONE
DROP       tcp  --  anywhere             anywhere             tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,RST,PSH,ACK,URG
DROP       tcp  --  anywhere             anywhere             tcp flags:!FIN,SYN,RST,ACK/SYN state NEW
DROP       tcp  --  anywhere             anywhere             tcp flags:FIN,SYN/FIN,SYN
DROP       tcp  --  anywhere             anywhere             tcp flags:SYN,RST/SYN,RST
DROP       all  --  127.0.0.0/8          anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:pop3
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:pop3s
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:imap2
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:imaps
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:smtp
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:submission
DROP       tcp  --  anywhere             anywhere             tcp dpt:mysql
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ftp-data
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ftp
ACCEPT     tcp  --  anywhere             anywhere             tcp dpts:30000:30500
ACCEPT     icmp --  anywhere             anywhere             icmptype 8 code 0
ACCEPT     icmp --  anywhere             anywhere             icmp any limit: avg 10/sec burst 20
DROP       icmp --  anywhere             anywhere             icmp any

Chain FORWARD (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
DROP       all  --  127.0.0.0/8          anywhere
ACCEPT     all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere

Chain f2b-sshd (1 references)
target     prot opt source               destination
REJECT     all  --  218.92.0.200         anywhere             reject-with icmp-port-unreachable
RETURN     all  --  anywhere             anywhere
Der Server auf dem ich Entwickle hat die 176.9.165.128.

Re: API geht via IPv6, aber nicht via IPv4

Posted: Sun 23. Jan 2022, 13:21
by OlliTheDarkness
Also 6 und 4 ist er erreichbar.

Code: Select all

***:~# curl -6 https://tector.24unix.net/api/v2/ping
{
    "code": "401 Unauthorized",
    "message": "API key is missing."
}

***:~# curl -4 https://tector.24unix.net/api/v2/ping
{
    "code": "401 Unauthorized",
    "message": "API key is missing."

Also liegts Problem meiner Meinung nach an deinem anfragendem Client

Re: API geht via IPv6, aber nicht via IPv4

Posted: Sun 23. Jan 2022, 13:28
by 24unix
OlliTheDarkness wrote: Sun 23. Jan 2022, 13:21 Also 6 und 4 ist er erreichbar.

Code: Select all

***:~# curl -6 https://tector.24unix.net/api/v2/ping
{
    "code": "401 Unauthorized",
    "message": "API key is missing."
}

***:~# curl -4 https://tector.24unix.net/api/v2/ping
{
    "code": "401 Unauthorized",
    "message": "API key is missing."

Also liegts Problem meiner Meinung nach an deinem anfragendem Client
Interessant, auf die Idee bin ich nicht gekommen, es von einem anderen Host zu testen.
OK, aber das hilft mir wohl, das Problem einzugrenzen.

Re: API geht via IPv6, aber nicht via IPv4

Posted: Sun 23. Jan 2022, 14:33
by 24unix
24unix wrote: Sun 23. Jan 2022, 12:48 tcp6 0 0 :::443 :::* LISTEN 0 2203674 306200/apache2


Da habe ich doch glatt vorhin gepennt.

Der Apache ist nur an tcp6 gebunden.


Im Panel ist es aber richtig:

apache.png
Aber, warum klappt es dann bei Olli?

Okay, daran liegt es nicht, bei einem anderen host, bei dem es geht sieht es genau so aus.

Re: API geht via IPv6, aber nicht via IPv4

Posted: Sun 23. Jan 2022, 14:45
by OlliTheDarkness
Noch ne Idee:
Beschränkung ?! Server IP (4) nicht in der Whitelist ?!

Re: API geht via IPv6, aber nicht via IPv4

Posted: Sun 23. Jan 2022, 14:51
by 24unix
OlliTheDarkness wrote: Sun 23. Jan 2022, 14:45 Noch ne Idee:
Beschränkung ?! Server IP (4) nicht in der Whitelist ?!
Habe noch gar nichts gewhitlistet solange ich noch am Testen bin …
Sonst wärst Du ja auch nicht drauf gekommen.

Re: API geht via IPv6, aber nicht via IPv4

Posted: Sun 23. Jan 2022, 14:53
by OlliTheDarkness
24unix wrote: Sun 23. Jan 2022, 14:51
OlliTheDarkness wrote: Sun 23. Jan 2022, 14:45 Noch ne Idee:
Beschränkung ?! Server IP (4) nicht in der Whitelist ?!
Habe noch gar nichts gewhitlistet solange ich noch am Testen bin …
Sonst wärst Du ja auch nicht drauf gekommen.
Is nen Argument ^^

Re: API geht via IPv6, aber nicht via IPv4

Posted: Sun 23. Jan 2022, 20:35
by 24unix
Also, ich habe die API nun auf einem zweiten Server am laufen.

Da passt alles:
apiok.png
Ich belasse es nun dabei, werde für einen Timeout nur ein Skip ausgeben, und es nicht als Fehler werten.

Für den ZoneTransfer reicht es, wenn der Server entweder über IPv4 oder über IPv6 erreichbar ist.

Da IPv6 wichtiger ist, und das funktioniert kann ich für den Moment damit leben.

Re: API geht via IPv6, aber nicht via IPv4

Posted: Mon 24. Jan 2022, 17:24
by 24unix
So, um das hier noch mal abzuschliessen: Ich weiß nicht, warum die Rechner sich pingen können, auch über IPv4, aber der API-Aufruf scheitert.

Da aber eine erfolgreiche Verbindung reicht, wird geskipped, und sobald entweder A oder AAAA pinbar waren gilt der Test als bestanden.

Scripte können dann den Rückgabewert prüfen, 0 ist bestanden, 1 ist Fehler.
apiping.png