[Megoldva] Proxmox IP subnet probléma

Fórumok

Sziasztok!
Egy Proxmox VE7 szerveren az eddigi 1 IP mellé vettem egy /29 subnetet (Hetzner a hosting).

Szeretnék 6 db, egymástól elszeparált NAT hálózatot, mindegyiknek saját IP címmel.
Ezért csináltam 6 bridget (vmbr1 - vmbr6), rendre 192.168.1.1/24 - 192.168.6.1/24, a helyi IP-ket DHCP osztja MAC alapján.
iptables-szel NAT-olom a megfelelő publikus IP megfelelő portját a megfelelő gépekhez.
Eddig megy is minden szépen, de ha az egyik ilyen VM-ből lekérdezem a publikus címemet, mindig a szerverhez kapott eredeti IP-t kapom, nem a saját címét (amin pl. ssh-n beléptem).
Pl.:

# ssh 1.2.3.4
# curl ifconfig.me
4.3.2.1

# ssh 1.2.3.5
# curl ifconfig.me
4.3.2.1

/etc/network/interfaces:
 

auto lo
iface lo inet loopback

iface lo inet6 loopback

auto enp6s0
iface enp6s0 inet static
        address 1.2.3.4/26
        address 4.3.2.1/32
        address 4.3.2.2/32
        address 4.3.2.3/32
        address 4.3.2.4/32
        address 4.3.2.5/32
        address 4.3.2.6/32
        gateway 1.2.3.129
        hwaddress aa:bb:cc:dd:ee:ff
        pointopoint 1.2.3.129
        up route add -net 1.2.3.128 netmask 255.255.255.192 gw 1.2.3.129 dev enp6s0
# route 1.2.3.128/26 via 1.2.3.129

iface enp6s0 inet6 static
        address 2a01:4f9:6b:1f0d::2/64
        gateway fe80::1

auto vmbr0
iface vmbr0 inet manual
        address 192.168.0.1/24
        bridge-ports none
        bridge-stp off
        bridge-fd 0
        post-up   iptables -t nat -A POSTROUTING -s '192.168.0.0/24' -o enp6s0 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '192.168.0.0/24' -o enp6s0 -j MASQUERADE
        post-up   iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
        post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1

auto vmbr1
iface vmbr1 inet static
        address 192.168.1.1/24
        bridge-ports none
        bridge-stp off
        bridge-fd 0
        up ip route add 4.3.2.1/32 dev vmbr1
        post-up   iptables -t nat -A POSTROUTING -s '192.168.1.0/24' -o enp6s0 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '192.168.1.0/24' -o enp6s0 -j MASQUERADE
        post-up   iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
        post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1

auto vmbr2
iface vmbr2 inet static
        address 192.168.2.1/24
        bridge-ports none
        bridge-stp off
        bridge-fd 0
        up ip route add 4.3.2.2/32 dev vmbr2
        post-up   iptables -t nat -A POSTROUTING -s '192.168.2.0/24' -o enp6s0 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '192.168.2.0/24' -o enp6s0 -j MASQUERADE
        post-up   iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
        post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1

auto vmbr3
iface vmbr3 inet static
        address 192.168.3.1/24
        bridge-ports none
        bridge-stp off
        bridge-fd 0
        up ip route add 4.3.2.3/32 dev vmbr3
        post-up   iptables -t nat -A POSTROUTING -s '192.168.3.0/24' -o enp6s0 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '192.168.3.0/24' -o enp6s0 -j MASQUERADE
        post-up   iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
        post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1

auto vmbr4
iface vmbr4 inet static
        address 192.168.4.1/24
        bridge-ports none
        bridge-stp off
        bridge-fd 0
        up ip route add 4.3.2.4/32 dev vmbr4
        post-up   iptables -t nat -A POSTROUTING -s '192.168.4.0/24' -o enp6s0 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '192.168.4.0/24' -o enp6s0 -j MASQUERADE
        post-up   iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
        post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1

auto vmbr5
iface vmbr5 inet static
        address 192.168.5.1/24
        bridge-ports none
        bridge-stp off
        bridge-fd 0
        up ip route add 4.3.2.5/32 dev vmbr5
        post-up   iptables -t nat -A POSTROUTING -s '192.168.5.0/24' -o enp6s0 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '192.168.5.0/24' -o enp6s0 -j MASQUERADE
        post-up   iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
        post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1

auto vmbr6
iface vmbr6 inet static
        address 192.168.6.1/24
        bridge-ports none
        bridge-stp off
        bridge-fd 0
        up ip route add 4.3.2.6/32 dev vmbr6
        post-up   iptables -t nat -A POSTROUTING -s '192.168.6.0/24' -o enp6s0 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '192.168.6.0/24' -o enp6s0 -j MASQUERADE
        post-up   iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
        post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1

Mit felejtettem ki?

 

Megoldás

Hozzászólások

Szerkesztve: 2022. 02. 09., sze – 22:42

iptables-szel NAT-olom a megfelelő publikus IP megfelelő portját a megfelelő gépekhez.

Attól tartok, hogy valamit nagyon félreértesz.

Ilyen szabályokat teszel fel:

iptables -t nat -A POSTROUTING -s '192.168.1.0/24' -o enp6s0 -j MASQUERADE
...
iptables -t nat -A POSTROUTING -s '192.168.6.0/24' -o enp6s0 -j MASQUERADE

Én nem tudom, hogy ettől hogyan várod azt, hogy a NAT utáni forrás IP cím eltérő lesz. Minden kimenő csomag ugyanabba az irányba, ugyanazon a WAN interfészen (enp6s0) megy ki, a MASQUERADE pedig ugyanarra az IP címre végzi a source NAT-ot.

Első körben, definiáld a konkrét NAT forrás IP címet, használd a "-j MASQUERADE" helyett a "-j SNAT --to-source 4.3.2.xx" konkrét NAT szabályokat.

Második körben, teljesen nem világos számomra, hogy a WAN interfész viszonylatában, ahol a fentiek alapján egy /26 van, ott mit csinál a "pointopoint", és akkor most egyáltalán mi is a hálózati topológiád, mi a WAN és LAN oldal... A WAN connectivity IP a 1.2.3.4/26, és a VM-eknek szánt tartomány pedig 4.3.2.0/29? Ha a VM-eken a 192.168.x.0/24-es tartományból felvett cím van, akkor mit csinál a "route ip route add 4.3.XX.1/32 dev vmbrXX" az adott interfészen?

source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

iface lo inet6 loopback

auto enp6s0
iface enp6s0 inet static
        address 1.2.1.4/26
        address 4.3.2.0/29
        gateway 1.2.3.129
        hwaddress aa:bb:cc:dd:ee:ff
        up route add -net 1.2.3.128 netmask 255.255.255.192 gw 1.2.3.129 dev enp6s0
# route 1.2.3.128/26 via 1.2.3.129

iface enp6s0 inet6 static
         address aaaa:bbbb:cccc:dddd::2/64
        gateway fe80::1

auto vmbr0
iface vmbr0 inet manual
        address 192.168.0.1/24
        bridge-ports none
        bridge-stp off
        bridge-fd 0
        post-up   iptables -t nat -A POSTROUTING -s '192.168.0.0/24' -o enp6s0 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '192.168.0.0/24' -o enp6s0 -j MASQUERADE
        post-up   iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
        post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1

auto vmbr1
iface vmbr1 inet static
        address 192.168.1.1/24
        bridge-ports none
        bridge-stp off
        bridge-fd 0
        post-up   iptables -t nat -A POSTROUTING -s '192.168.1.0/24' -o enp6s0 -j SNAT --to-source 4.3.2.1
        post-down iptables -t nat -D POSTROUTING -s '192.168.1.0/24' -o enp6s0 -j SNAT --to-source 4.3.2.1
        post-up   iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
        post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1

auto vmbr2
iface vmbr2 inet static
        address 192.168.2.1/24
        bridge-ports none
        bridge-stp off
        bridge-fd 0
        post-up   iptables -t nat -A POSTROUTING -s '192.168.2.0/24' -o enp6s0 -j SNAT --to-source 4.3.2.2
        post-down iptables -t nat -D POSTROUTING -s '192.168.2.0/24' -o enp6s0 -j SNAT --to-source 4.3.2.2
        post-up   iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
        post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1

auto vmbr3
iface vmbr3 inet static
        address 192.168.3.1/24
        bridge-ports none
        bridge-stp off
        bridge-fd 0
        post-up   iptables -t nat -A POSTROUTING -s '192.168.3.0/24' -o enp6s0 -j SNAT --to-source 4.3.2.3
        post-down iptables -t nat -D POSTROUTING -s '192.168.3.0/24' -o enp6s0 -j SNAT --to-source 4.3.2.3
        post-up   iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
        post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1

auto vmbr4
iface vmbr4 inet static
        address 192.168.4.1/24
        bridge-ports none
        bridge-stp off
        bridge-fd 0
        post-up   iptables -t nat -A POSTROUTING -s '192.168.4.0/24' -o enp6s0 -j SNAT --to-source 4.3.2.4
        post-down iptables -t nat -D POSTROUTING -s '192.168.4.0/24' -o enp6s0 -j SNAT --to-source 4.3.2.4
        post-up   iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
        post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1

auto vmbr5
iface vmbr5 inet static
        address 192.168.5.1/24
        bridge-ports none
        bridge-stp off
        bridge-fd 0
        post-up   iptables -t nat -A POSTROUTING -s '192.168.5.0/24' -o enp6s0 -j SNAT --to-source 4.3.2.5
        post-down iptables -t nat -D POSTROUTING -s '192.168.5.0/24' -o enp6s0 -j SNAT --to-source 4.3.2.5
        post-up   iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
        post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1

auto vmbr6
iface vmbr6 inet static
        address 192.168.6.1/24
        bridge-ports none
        bridge-stp off
        bridge-fd 0
        post-up   iptables -t nat -A POSTROUTING -s '192.168.6.0/24' -o enp6s0 -j SNAT --to-source 4.3.2.6
        post-down iptables -t nat -D POSTROUTING -s '192.168.6.0/24' -o enp6s0 -j SNAT --to-source 4.3.2.6
        post-up   iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
        post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1

A javaslataid alapján módosítottam mindent, így már szépen működik.

Hálásan köszönöm az idődet és a segítséged!

Szerkesztve: 2022. 02. 09., sze – 22:46

A /26 a Hetzner default konfigbam volt, az igazából /32, az a szerver eredeti IP címe.

A WAN oldalon a szerver eredeti IP címe (1.2.3.4) + a /29 subnet (4.3.2.1 - 4.3.2.6) kellene, hogy legyen.

A LAn oldalon 6 db alhálózat kellene, mind saját IP-vel kifelé (4.3.2.1 - 4.3.2.6 tartományból)
A belső IP a 4.3.2.1 hálózathoz 192.168.1.1/24
a 4.3.2.2 hálózathoz 192.168.2.1/24 és így tovább

A /26 a Hetzner default konfigbam volt, az igazából /32, az a szerver eredeti IP címe.

Attól tartok, hogy az IP hálózatok alapjaival nem vagy tisztában. A WAN kapcsolatot a Hetznertől egy subnetben kapod. Az IP címet és a hálózatot vagy CIDR formátumban adod meg (pl. 1.2.3.4/26) vagy IP address és netmask formában. (address 1.2.3.4, netmask 255.255.255.192)

A routing és a NAT két külön dolog. A belső hálózatodban a VM-eknek privát IP címük van, így arra az interface-re publikus IP-t route-olni hiba. A belső hálózatban _nincs_ publikus IP cím. A belső gép elérhetőségét destination NAT-tal tudod biztosítani (a la port forward), a belső gép kijárását a külvilágba pedig source NAT-tal.

Az IP címet és a hálózatot vagy CIDR formátumban adod meg (pl. 1.2.3.4/26) vagy IP address és netmask formában. (address 1.2.3.4, netmask 255.255.255.192)

Igen, ezt tudom. Valamit rosszul írtam, hogy ezt nem nézted ki belőlem?

A routing és a NAT két külön dolog. A belső hálózatodban a VM-eknek privát IP címük van, így arra az interface-re publikus IP-t route-olni hiba. A belső hálózatban _nincs_ publikus IP cím.

Ez is tiszta, valószínűleg valahol hibáztam a terminológiában, ha mást gondolsz.

Az eredeti konfigot javítom, mert az utólag vásárolt subnet IP címeit is hozzáadtam az interfészhez, de a konfigból kimaradt.

A NAT-olást a public IP-ről a belső IP-re a következőképpen végzem most:
PL.:

-A PREROUTING -d 4.3.2.1/32 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.1.2:3389
-A PREROUTING -d 4.3.2.1/32 -p tcp -m tcp --dport 22 -j DNAT --to-destination 192.168.1.3:22

Ez a 2 VM a vmbr1-en van., kívülről mindkettő elérhető és egymást is látják a local IP-ken.