Második IP cím felvétele gubanc

Fórumok

Sziasztok!

Picit hosszú leszek, de minden szükséges infót szeretnék megadni ahhoz, hogy tudjatok segíteni.

Adott egy bérelt szerver a Hetznernél. Az ethernet kártyára az lspci az alábbit köpi:

23:00.0 Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev 03)

Nos A gép webszerverként működik. Ubuntu 24.04-et raktam rá.

Gépet megvettem, felraktam rá, amit akartam, nem nagy truváj. Majd jött az ötlet, hogy miért ne válthatnám ki egy géppel 2 gép funkcióját úgy, hogy 2 IP címet használok. Fel is húztam egy postfixet dockerben, ami látszólag működik is. Azonban hiába állítottam be az új IP-t, arra az Istennek se akar hallgatni. Sem a pingre, se másra nem válaszol.

95.217.36.183 IP-vel vettem a gépet, a 95.217.36.178-at pedig utólag kértem hozzá (ezzel van bajom).

cat /etc/netplan/01-netcfg.yaml 
### Hetzner Online GmbH installimage
network:
  version: 2
  renderer: networkd
  ethernets:
    enp35s0:
      addresses:
        - 95.217.36.183/32
        - 95.217.36.178/32
        - 2a01:4f9:2b:2ee9::2/64
      routes:
        - on-link: true
          to: 0.0.0.0/0
          via: 95.217.36.129
        - to: default
          via: fe80::1
      nameservers:
        addresses:
          - 8.8.8.8
          - 2a01:4ff:ff00::add:1
          - 8.8.4.4
          - 2a01:4ff:ff00::add:2

Nézzünk egy ilyet is:

ip route show
default via 95.217.36.129 dev enp35s0 proto static onlink 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 

Oké, akkor mit mond az ifconfig:

docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:71ff:fe0b:7ae6  prefixlen 64  scopeid 0x20<link>
        ether 02:42:71:0b:7a:e6  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4  bytes 440 (440.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp35s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 95.217.36.183  netmask 255.255.255.255  broadcast 0.0.0.0
        inet6 2a01:4f9:2b:2ee9::2  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::aaa1:59ff:fe3e:bb9d  prefixlen 64  scopeid 0x20<link>
        ether a8:a1:59:3e:bb:9d  txqueuelen 1000  (Ethernet)
        RX packets 219528  bytes 39465168 (39.4 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 294920  bytes 245145398 (245.1 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device memory 0xfc200000-fc27ffff  

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 559491  bytes 158599643 (158.5 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 559491  bytes 158599643 (158.5 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vethdcbc1b1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::5c59:98ff:fe0e:5cf4  prefixlen 64  scopeid 0x20<link>
        ether 5e:59:98:0e:5c:f4  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 800 (800.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

és az ip addr show:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp35s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether a8:a1:59:3e:bb:9d brd ff:ff:ff:ff:ff:ff
    inet 95.217.36.183/32 scope global enp35s0
       valid_lft forever preferred_lft forever
    inet 95.217.36.178/32 scope global enp35s0
       valid_lft forever preferred_lft forever
    inet6 2a01:4f9:2b:2ee9::2/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::aaa1:59ff:fe3e:bb9d/64 scope link 
       valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:71:0b:7a:e6 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:71ff:fe0b:7ae6/64 scope link 
       valid_lft forever preferred_lft forever
5: vethdcbc1b1@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether 5e:59:98:0e:5c:f4 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::5c59:98ff:fe0e:5cf4/64 scope link 
       valid_lft forever preferred_lft forever

Na meg az ufw (iptables -L -n -v kimenet ide kattintva olvasható)

ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), allow (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
80/tcp                     ALLOW IN    Anywhere                  
443/tcp                    ALLOW IN    Anywhere                  
2226                       ALLOW IN    Anywhere                  
2226/tcp                   ALLOW IN    Anywhere                  
110/tcp                    ALLOW IN    Anywhere                  
995/tcp                    ALLOW IN    Anywhere                  
143/tcp                    ALLOW IN    Anywhere                  
993/tcp                    ALLOW IN    Anywhere                  
25/tcp                     ALLOW IN    Anywhere                  
465/tcp                    ALLOW IN    Anywhere                  
587/tcp                    ALLOW IN    Anywhere                  
18105/tcp                  ALLOW IN    Anywhere                  
6379/tcp                   ALLOW IN    Anywhere                  
95.217.36.178 on enp35s0   ALLOW IN    Anywhere                  
2525                       ALLOW IN    Anywhere                  
80/tcp (v6)                ALLOW IN    Anywhere (v6)             
443/tcp (v6)               ALLOW IN    Anywhere (v6)             
2226 (v6)                  ALLOW IN    Anywhere (v6)             
2226/tcp (v6)              ALLOW IN    Anywhere (v6)             
110/tcp (v6)               ALLOW IN    Anywhere (v6)             
995/tcp (v6)               ALLOW IN    Anywhere (v6)             
143/tcp (v6)               ALLOW IN    Anywhere (v6)             
993/tcp (v6)               ALLOW IN    Anywhere (v6)             
25/tcp (v6)                ALLOW IN    Anywhere (v6)             
465/tcp (v6)               ALLOW IN    Anywhere (v6)             
587/tcp (v6)               ALLOW IN    Anywhere (v6)             
18105/tcp (v6)             ALLOW IN    Anywhere (v6)             
6379/tcp (v6)              ALLOW IN    Anywhere (v6)             
2525 (v6)                  ALLOW IN    Anywhere (v6)             

Anywhere                   ALLOW OUT   95.217.36.178 on enp35s0

És végül ping:

ping 95.217.36.178
PING 95.217.36.178 (95.217.36.178): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1

Bárkinek bármi használható ötlete van esetleg? Ha még infó kell, szóljatok és írom. Köszönöm. 

Hozzászólások

Szerkesztve: 2024. 08. 22., cs – 11:14

https://www.calculator.net/ip-subnet-calculator.html?cclass=any&csubnet…

 

Nagyon keveset tudok a hálózatokról, de ez a kevés alapján:

A /32 az annyit jelent, hogy a hálózatban 1 db gép van, saját maga. Ettől még láthatnák egymást, ha a route meg lenne oldva. Ennél egyszerűbb, ha nem /32-tőt használsz. Lásd subnet calculator

ps.: persze egy gépnek a saját ip címét látnia kell

 

 

"Majd jött az ötlet, hogy miért ne válthatnám ki egy géppel 2 gép funkcióját úgy, hogy 2 IP címet használok. Fel is húztam egy postfixet dockerben, ami látszólag működik is. Azonban hiába állítottam be az új IP-t, arra az Istennek se akar hallgatni. Sem a pingre, se másra nem válaszol."

Ez alapján nem 2 db ip kell neked, hanem haproxy.

Cloud szolgáltatók szeretnek pont-pont kapcsolatot adni a virtuális gépeknek és a túloldalon routeolják a csomagokat a megfelelő tunnelekbe/interface-ekbe esetleg proxyARPognak ha kell. Az előnye hogy egy elkonfigurált VM nem tudja lelőni egy másik VM hálózatát és nem látod más broadcast vagy multicast forgalmait. Mint egy veth a hoston belül. A containerben ethernetet látsz, de az valójában nem az. Nem tudom hogy a Hetzner ezt konkrétan hogyan oldja meg, de az AWS IPv6-on valahogy így működik, a prefix length az /128 a DHCPv6 által kiosztott címeken. Szóval szerintem ez a /32 csak a cloud környezet adottsága, nem lényeges az issue szempontjából.

Azzal viszont egyetértek hogy a második IP felesleges, egy IP-n el tudná vinni az összes szolgáltatást ha nincs port ütközés. Én erre indultam volna el. Még haproxy sem kell ha nincs mögötte több gép vagy egy container, elég csak a Docker container portját kilógatni, vagy akár host networkon is futtatni a containert (nem annyira javallott ebben az esetben, de néha nincs más megoldás).

Mi alapján mondanád meg hogy melyik domainről van szó? Az RCPT TO alapján? Beszél egyáltalán a haproxy SMTP-t és nem csak TCP-t? Én úgy emlékszem csak load-balancingot csináltunk haproxy-val, nem protokoll szinten definiált szétválogatást. De nem tegnap volt.

Én erre pont inkább csak egy containert használnék ami mindkét domaint viszi és LMTP-vel rakhatja le a leveleket mondjuk két külön IMAP containerbe ha ez egyáltalán szükséges (egy Dovecot elég lehet ide ami kezeli az összes domaint). Ha meg nem lehet összevonni valami miatt akkor meg raknék elé egy mini SMTP router containert ami tolja befelé a leveleket.

A /32 több, mint ganyús (a .183 működik?).

Esetleg egy

ip route add 95.217.36.178/32 95.217.36.183 

Fedora 42, Thinkpad x280

Majd jött az ötlet, hogy miért ne válthatnám ki egy géppel 2 gép funkcióját úgy, hogy 2 IP címet használok

Nekem feleslegesnek tűnik két IP-cím. A különböző szolgáltatásokat különböző portokra kell definiálni, ahhoz meg elég egyetlen IP-cím.

Ha mégis több IP-címre van szükséged, akkor másképpen kell megrendelned a szolgáltatást.

tcpdump-ot az enp35s0-nak! Szűrd a kétes IP címre - 95.217.36.183! Ha megy a tcpdump, kezdd el pingelni.
A tcpdump kimenetben ami kérdéses:

  • bejön-e egyáltalán a te gépedhez a kérdéses ICMP csomag?
  • ha nem, akkor előtt jön-e ARP Request, hogy mi is a mac address ehhez az IP-hez?
  • ha jön, akkor a masinád válaszol-e, hogy igen, itt vagyok?
  • esetleg válaszol más is? Bár azt így nem fogod tudni: a válasz már nem broadcast. A következőt viszont ki tudod próbálni:
    • lehúzod az interface-ről ezt az IP-t,
    • gonosz módon mégis megpingeled. Válasz ugyan nem fog jönni - de az ICMP tiltás előtt azért az ARP-request, ARP response le fog futni, így az ARP táblába bele kerül a másik gép IP-je - már ha van ilyen. (Nem szabadna lenni, de biztos ami tuti: zárjuk ki a lehetőségét.)

Tovább lépni a válaszok ismeretében lehet majd. További problémára számíthatsz: meg kell majd oldani, hogy amikor a postfix konténer nyitna kapcsolatot kifele, akkor ne a default IP-n menjen ki a forgalom, hanem az erre dedikált IP címen. De előbb menjen a második IP, utána szöszöljünk azzal, hogy a kimenő kapcsolat használja is.


 

Miért a .183-at akarjam piszkálni?

tcpdump -i enp35s0 host 95.217.36.178
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on enp35s0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
22:40:04.343663 IP 128.199.148.131.40076 > smtp.tegyjot.com.457: Flags [S], seq 2798857730, win 1024, length 0
22:40:14.081893 IP 103.26.116.109.49263 > smtp.tegyjot.com.microsoft-ds: Flags [S], seq 120875257, win 8192, options [mss 1460,nop,nop,sackOK], length 0
22:40:26.321556 IP hosting-by.4cloud.mobi.50040 > smtp.tegyjot.com.8577: Flags [S], seq 2004926120, win 1024, length 0
22:40:34.438324 IP static.109.51.216.95.clients.your-server.de.52199 > smtp.tegyjot.com.https: Flags [SEW], seq 1999652922, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
22:40:37.442779 IP static.109.51.216.95.clients.your-server.de.52199 > smtp.tegyjot.com.https: Flags [SEW], seq 1999652922, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
 

Egyelőre eddig jutottam.

Jogos, elírtam, a problémás IP cím nem a .183 hanem a .178.

A tcpdump alapján a forgalom kintről beesik, válasz semmire sem megy. A dolog annyiban jó hír, hogy a probléma a "dobozon belül" van azaz nálad.

Hogy változik a helyzet, ha kézből beszúrsz két tűzfalszabályt, amely a pingelést végző gép IP címéről minden forgalmat beenged és oda minden forgalmat ki is enged?

Szerkesztve: 2024. 08. 21., sze – 23:02

Esetleg egy teszt erejéig egy ilyet megnéznék:

ip address add 95.217.36.178/32 dev enp35s0

az ufw alapján nem látom, hogy az icmp engedélyezett lenne bejövő forgalomra. A tcpdumpban (egy -n flag nem lett volna rossz, hogy tényleg az IP legyen benne) meg a ping nem is látszik, az meg, hogy az itt lévő portokon az adott címen figyel-e bármi, nem derül ki.

PING 95.217.36.183 (95.217.36.183) 56(84) bytes of data.
64 bytes from 95.217.36.183: icmp_seq=1 ttl=49 time=61.2 ms
64 bytes from 95.217.36.183: icmp_seq=2 ttl=49 time=61.6 ms
64 bytes from 95.217.36.183: icmp_seq=3 ttl=49 time=61.5 ms
64 bytes from 95.217.36.183: icmp_seq=4 ttl=49 time=61.5 ms
64 bytes from 95.217.36.183: icmp_seq=5 ttl=49 time=61.5 ms
64 bytes from 95.217.36.183: icmp_seq=6 ttl=49 time=61.5 ms
^C
--- 95.217.36.183 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 4998ms
rtt min/avg/max/mdev = 61.205/61.505/61.612/0.197 ms
 

Ifconfig helyett "ip a" parancsot hasznald, az ifconfig elavult es rosszul mutat sok mindent.

Egy `ip r sh` kimenet talán még segíthetne.

Amikor távolról pingeted a gépet akkor egy `tcpdump -ni any icmp` mit mond? Van bejövő kérés? Megy válasz? Milyen forrás címmel?

Szerkesztve: 2024. 08. 22., cs – 00:20

hetzner robot-on ellenőrizd, hogy az új ip címhez a megfelelő mac address tartozik vagy sem. Ha jól emlékszem, alapból generáltat kapsz a megrendelés után (és masszív mac alapú szűrés van náluk)

// Happy debugging, suckers
#define true (rand() > 10)

Hetzner-nél az Ipv4 -nél úgy működik, minden további ip címet (ip1, ip2, .. ) a "fő ip címedre" routolnak.
Forgalom

internet --> gw --> főipcím --> ip1, ip2, ...
internet <-- gw <-- főipcím <-- ip1, ip2, ...

Tehát, fel kell venned két FORWARD szabályt, minden további ip címhez(ip1, ip2,... ), hogy átengedd a forgalmat ( ezáltal tudod használni ):
 

-t filter -A FORWARD -s <ip1> -j ACCEPT
-t filter -A FORWARD -d <ip1> -j ACCEPT
#
-t filter -A FORWARD -s <ip2> -j ACCEPT
-t filter -A FORWARD -d <ip2> -j ACCEPT
....