Több hálózati kártya, több IP cím - Debian

Fórumok

Sziasztok,

Van egy amazon-on bérelt instancom. Úgy alakult, hogy kellene hozzá még egy IP cím. Az amazon webes felületén össze is nyomkodtam. A VPS megkapta a 2. hálókártyát is és ahhoz hozzár rendeltem a tűzfal szabályokat és a külső IP-t is. Ennek ellenére nem akarja az igazságot és két hülyeséget produkál:

Mit és hogyan kell beállítani, gondolom a routing táblába, hogy mind a két IP címen elérhető legyen minden szolgáltatás, amit tűzfalon engedélyezek (pl: web mind a kettőn menjen, de SSH csak az egyiken)? Illetve debian esetében, hogyan lehet azt beállítani, hogy a reboot után is minden jó legyen?

Válaszotokat és a segítséget előre is köszönöm.

Ja és a de béna vagy, hogy még ezt sem tudod megcsinálni és hasonló okos kommentket kérjük hagyjuk ki. Azért jöttem ide segítségért, mert tényleg nem értem. Látom a neten a leírásokat a routing tábláról és a rule-ról, de nem értem, hogy mi és hogyan működik ilyen esetben, így akár hogy írom be, nem működik.

# ip addr
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: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
    link/ether 0a:71:41:e9:72:cc brd ff:ff:ff:ff:ff:ff
    inet 172.31.7.187/20 brd 172.31.15.255 scope global dynamic ens5
       valid_lft 3133sec preferred_lft 3133sec
    inet6 fe80::871:41ff:fee9:72cc/64 scope link
       valid_lft forever preferred_lft forever
3: ens6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
    link/ether 0a:d3:62:ff:6d:f4 brd ff:ff:ff:ff:ff:ff
    inet 172.31.8.219/20 brd 172.31.15.255 scope global dynamic ens6
       valid_lft 3421sec preferred_lft 3421sec
    inet6 fe80::8d3:62ff:feff:6df4/64 scope link
       valid_lft forever preferred_lft forever
# ip route
default via 172.31.0.1 dev ens5
172.31.0.0/20 dev ens5 proto kernel scope link src 172.31.7.187
172.31.0.0/20 dev ens6 proto kernel scope link src 172.31.8.219
# ip rule
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default
# ifconfig
ens5: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9001
        inet 172.31.7.187  netmask 255.255.240.0  broadcast 172.31.15.255
        inet6 fe80::871:41ff:fee9:72cc  prefixlen 64  scopeid 0x20<link>
        ether 0a:71:41:e9:72:cc  txqueuelen 1000  (Ethernet)
        RX packets 1443  bytes 900201 (879.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 956  bytes 452276 (441.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens6: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9001
        inet 172.31.8.219  netmask 255.255.240.0  broadcast 172.31.15.255
        inet6 fe80::8d3:62ff:feff:6df4  prefixlen 64  scopeid 0x20<link>
        ether 0a:d3:62:ff:6d:f4  txqueuelen 1000  (Ethernet)
        RX packets 18  bytes 1870 (1.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 49  bytes 4410 (4.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

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 5  bytes 560 (560.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5  bytes 560 (560.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Hozzászólások

Az adott serviceknek meg tudod adni hogy milyen IP-n es milyen porton hallgassanak, ez altalaban pl egy httpd eseteben *:80.
Itt eldontheted, hogy megadsz neki fix IP-t vagy az iptables-el korlatozod hova johet be keres.

par tool a debugolashoz,
ss - regi netstat mostani megfeleloje, ezzel meg tudod nezni hogy ki milyen IP/port-on listenel
tcpdump - ezzel tudod debugolni, hogy meddig jut el a keresed
iptables-persistent - ezzel reboot utan is megmaradnak a tuzfal szabalyok, ha lementetted oket

routing tablat/tablakat ehhez szerintem nemnagyon kell basztatni, de majd meg ugyis kiderul ez az, hogy vegulis miert es hogyan szeretnel valamit:)

kipróbáltam már azt, hogy SSH-nak megadtam a két belső IP-t figyelésre, de akkor sem értem el, csak az egyikről... de miért is értem volna el, logikusan végig gondolva

# netstat -lanp | grep LISTEN
tcp        0      0 0.0.0.0:55000           0.0.0.0:*               LISTEN      547/sshd
# netstat -lanp | grep LISTEN
tcp        0      0 172.31.7.187:55000      0.0.0.0:*               LISTEN      1284/sshd
tcp        0      0 172.31.8.219:55000      0.0.0.0:*               LISTEN      1284/sshd

a felső a 0.0.0.0-val azt jelenti, hogy bárhonnan jöhet, az alsó esetben pedig korlátoztam erre a két ip-re... így hálózati szempontból nem látok a kettő között különbséget és nincs is, mert nem működik

igen, megnéztem... betalálnak a csomagok, mert ezt kaptam, amikor a másik ip-re próbáltam csatlakozni ssh-n, előtte és utána pedig csend volt a csatornán, tehát a csomag bejön, vagyis amazon oldaláról jól állítottam be a dolgokat

# tcpdump -i ens6
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens6, link-type EN10MB (Ethernet), capture size 262144 bytes
10:09:53.085557 IP 51B6AE43.dsl.pool.telekom.hu.62542 > ip-172-31-8-219.eu-central-1.compute.internal.55000: Flags [S], seq 419777996, win 64240, options [mss 1452,nop,wscale 8,nop,nop,sackOK], length 0
10:09:54.098371 IP 51B6AE43.dsl.pool.telekom.hu.62542 > ip-172-31-8-219.eu-central-1.compute.internal.55000: Flags [S], seq 419777996, win 64240, options [mss 1452,nop,wscale 8,nop,nop,sackOK], length 0
10:09:55.907499 IP6 fe80::8d3:62ff:feff:6df4.dhcpv6-client > ff02::1:2.dhcpv6-server: dhcp6 solicit
10:09:56.112715 IP 51B6AE43.dsl.pool.telekom.hu.62542 > ip-172-31-8-219.eu-central-1.compute.internal.55000: Flags [S], seq 419777996, win 64240, options [mss 1452,nop,wscale 8,nop,nop,sackOK], length 0
10:10:00.115817 IP 51B6AE43.dsl.pool.telekom.hu.62542 > ip-172-31-8-219.eu-central-1.compute.internal.55000: Flags [S], seq 419777996, win 64240, options [mss 1452,nop,wscale 8,nop,nop,sackOK], length 0
10:10:08.122481 IP 51B6AE43.dsl.pool.telekom.hu.62542 > ip-172-31-8-219.eu-central-1.compute.internal.55000: Flags [S], seq 419777996, win 64240, options [mss 1452,nop,wscale 8,nop,nop,sackOK], length 0
10:10:33.681527 ARP, Request who-has ip-172-31-8-219.eu-central-1.compute.internal tell ip-172-31-0-1.eu-central-1.compute.internal, length 28
10:10:33.681547 ARP, Reply ip-172-31-8-219.eu-central-1.compute.internal is-at 0a:d3:62:ff:6d:f4 (oui Unknown), length 28

Alapértelmezetten csak egy default gw van, így a kimenő csomagok azon sunnyognak ki.

Két default gw esetén alapértelmezetten az elsőn fog kimenni a csomag - akkor is, ha a második lábon jött be a kapcsolathoz tartozó csomag. Ilyenkor kell iptables segítségével megjelölni, hogy ez a kapcsolat a 2. lábon épült fel, tehát a választ is a 2. lábon kell kiküldeni. Tehát jó felé keresgélsz, hogy a routing a hunyó, de itt már az iproute2 csomag kell, külön definiálandó a route az egyik láb esetén és külön a másik esetén, de a döntés, hogy mely routing tábla alkalmazandó, az az iptables által beállított jelölés alapján dől el.

És ha nincs is iptables használatban? A VPS szintjén nem használok tűzfalat, mert az amazon webes felületén mindent be lehet állítani precízen és mivel ott szabály csoportoket tudok létrehozni, így fel tudom venni külön csoportokbe a web szabályokat, a ssh szabályokat és minden VPS-hez azt, vagy azokat rendelem hozzá, amit szeretnék... így sokkal könnyebb ott kezelni egybe minden vps-t, mint a vps-en belül iptables használatával.

routing táblája ettől független ugye van a gépnek, csak nagyon nem látom át, hogy mi micsoda benne és miért nem találnak ki a csomagok... régen tanultam cisco routerek konfigurálását cli-ben, akkor értettem ezeket, illetve akkor fel tudtam húzni egy komoly környezetet, de ez 2009-be volt és ez sajnos nem olyan, mint a biciklizés

# ip route
default via 172.31.0.1 dev ens5
172.31.0.0/20 dev ens5 proto kernel scope link src 172.31.7.187
172.31.0.0/20 dev ens6 proto kernel scope link src 172.31.8.219

vagyis ha jól értem, akkor itt az a gond, hogy bejön az adat ens5 csatolón és elmegy a 172.31.0.1 felé a válasz, ami oda is talál, ahova kell, de amikor az ens6-on jön be az adat, akkor is az ens5 "kártyán" megy vissza a válasz a 172.31.0.1 felé és ezért tűnik úgy mondjuk egy ssh kliensnek, hogy elérhetetlen a szerver?

Az AWS-es setupról is kéne írjál. Elastic IP van vagy ELB?

zászló, zászló, szív

Mindkét hálókártyára rárakod mindkét IP-t :^)

Sikerült megoldani a problémát és írtam rá egy scriptet is. Mivel azt vettem észre, hogy az indításoknál random választ default gateway-t, ezért lekezeltem mind a két esetet.

A script itt kapott helyet: /etc/network/if-pre-up.d/route_multiple (így a gép indulás után, amikor felépült a network alrendszer, lefuttatja a debian magától). Futtatás után pedig már visszatalálnak a csomagok.

#!/bin/sh

CMD_IP=`which ip`
CMD_SED=`which sed`

DEVICE_1_NAME="ens5"
DEVICE_2_NAME="ens6"

DEVICE_1_ADDR=`${CMD_IP} -f inet addr show ${DEVICE_1_NAME} | ${CMD_SED} -En -e 's/.*inet ([0-9.]+).*/\1/p'`
DEVICE_2_ADDR=`${CMD_IP} -f inet addr show ${DEVICE_2_NAME} | ${CMD_SED} -En -e 's/.*inet ([0-9.]+).*/\1/p'`

DEFAULT_GW_DEVICE=`${CMD_IP} route show default | awk '{print $5}'`
DEFAULT_GW_ADDR=`${CMD_IP} route show default | ${CMD_SED} -En -e 's/.+ ([0-9.]+).*/\1/p'`

################################################################################

if [ "${DEFAULT_GW_DEVICE}" = "${DEVICE_1_NAME}" ]; then

    ${CMD_IP} rule add from ${DEVICE_2_ADDR} table default

    ${CMD_IP} route add default via ${DEFAULT_GW_ADDR} dev ${DEVICE_2_NAME} table default

fi

################################################################################

if [ "${DEFAULT_GW_DEVICE}" = "${DEVICE_2_NAME}" ]; then

    ${CMD_IP} rule add from ${DEVICE_1_ADDR} table default

    ${CMD_IP} route add default via ${DEFAULT_GW_ADDR} dev ${DEVICE_1_NAME} table default

fi

################################################################################

${CMD_IP} route flush cache

köszi mindenkinek a segítséget és remélem a scriptem majd segítség lesz másoknak is