Asignar IP de salida para una máquina virtual libvirt usando una red enrutada

Asignar IP de salida para una máquina virtual libvirt usando una red enrutada

La interfaz de mi red de host tiene dos IP. Actualmente, estoy ejecutando mis máquinas virtuales en unenrutadored.

La interfaz de red del host es miembro de publicla zona en firewalld, con ambosadelanteymascaradaactivado.

Con la configuración descrita anteriormente, la VM puede conectarse a Internet y puedo agregar reenvíos de puertos a la VM firewalldcon --add-forward-port.

Sin embargo, ahora quiero cambiar la IP de salida de una de mis máquinas virtuales (la IP queenmascaradoa) a otra IP que esté disponible en la interfaz de red de mi host.
Intenté agregar una SNATregla a mi nftablesya que firewalldno la admite. El comando que utilicé fue nft add rule nat POSTROUTING snat to ip saddr map { <VM's IP> : <public ip> }, esto hace que la máquina virtual se desconecte de Internet pero aún pueda conectarse con el reenvío de puertos configurado firewalld.

Busqué en Google sobre esto y no encontré mucha información al respecto.

Aquí hay algunas configuraciones.

La IP pública predeterminada se redacta en 10.0.0.1, y la IP pública secundaria se redacta en 10.0.0.2.

La IP NAT de la VM 1 está redactada en 192.168.122.1y la IP NAT de la VM 2 está redactada en 192.168.122.2.

CortafuegosD

libvirt (active)                                                                                                                                                                                                                                                                                                                                         
  target: ACCEPT                                                                                                                                                                                                                                                                                                                                         
  icmp-block-inversion: no
  interfaces: virbr0
  sources: 
  services: custom--ms-wbt-server-ms-wbt-server dhcp dhcpv6 dns ssh tftp
  ports: 
  protocols: icmp ipv6-icmp
  forward: no
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
        rule priority="32767" reject

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp1s0f0
  sources: 
  services: cockpit dhcpv6-client libvirt libvirt-tls mdns ssh steam-streaming vnc-server
  ports: 
  protocols: 
  forward: yes
  masquerade: yes
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
        rule family="ipv4" destination address="10.0.0.2" forward-port port="33412" protocol="tcp" to-port="3389" to-addr="192.168.122.2" # another public ip is the ip that i want to change to
        rule family="ipv4" destination address="10.0.0.1" forward-port port="33411" protocol="udp" to-port="3389" to-addr="192.168.122.1" # default public ip is the default outlet ip
        rule family="ipv4" destination address="10.0.0.1" forward-port port="33411" protocol="tcp" to-port="3389" to-addr="192.168.122.1"
        rule family="ipv4" destination address="10.0.0.2" forward-port port="33412" protocol="udp" to-port="3389" to-addr="192.168.122.2"

virsh

<network connections='2'>
  <name>default</name>
  <uuid>(network uuid)</uuid>
  <forward mode='route'/>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='<mac address>'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
    </dhcp>
  </ip>
</network>

ip addr

enp1s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether <mac address> brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.1/24 brd <broadcast addr> scope global noprefixroute enp1s0f0
       valid_lft forever preferred_lft forever
    inet 10.0.0.2/25 brd <broadcast addr> scope global noprefixroute enp1s0f0
       valid_lft forever preferred_lft forever

ip route

default via <default public ip gateway> dev enp1s0f0 proto static metric 100 
<default public ip subnet> dev enp1s0f0 proto kernel scope link src 10.0.0.1 metric 100 
<secondary public ip subnet> dev enp1s0f0 proto kernel scope link src 10.0.0.2 metric 100 
<virsh network subnet> dev virbr0 proto kernel scope link src 192.168.122.1

Mi servidor se está ejecutando Fedora 37con firewalld 1.2.2y nftables 1.0.4.

información relacionada