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?
- 175 megtekintés
Hozzászólások
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?
- A hozzászóláshoz be kell jelentkezni
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!
- A hozzászóláshoz be kell jelentkezni
A WAN connectivity IP a 1.2.3.4/26, és a VM-eknek szánt tartomány pedig 4.3.2.0/29?
Igen
- A hozzászóláshoz be kell jelentkezni
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 hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni