
Minha interface de rede host possui dois IPs. Atualmente, estou executando minhas VMs em umroteadorede.
A interface de rede do host é membro da public
zona em firewalld
, com ambosavançaremascaradahabilitado.
Com a configuração descrita anteriormente, a VM é capaz de se conectar à Internet e posso adicionar encaminhamentos de porta à VM com firewalld
's --add-forward-port
.
No entanto, agora quero alterar o IP de saída de uma das minhas VMs (o IP quemascaradopara) para outro IP disponível na interface de rede do meu host.
Tentei adicionar uma SNAT
regra ao meu, nftables
pois firewalld
não oferece suporte. O comando que usei foi nft add rule nat POSTROUTING snat to ip saddr map { <VM's IP> : <public ip> }
, isso faz com que a VM seja desconectada da Internet, mas ainda consiga se conectar com o encaminhamento de porta definido em firewalld
.
Pesquisei no Google sobre isso e não encontrei muita informação sobre isso.
Aqui estão algumas configurações.
O IP público padrão é editado para 10.0.0.1
, e o IP público secundário é editado para 10.0.0.2
.
O IP NAT da VM 1 é editado para 192.168.122.1
e o IP NAT da VM 2 é editado para 192.168.122.2
.
FirewallD
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
Meu servidor está rodando Fedora 37
com firewalld 1.2.2
e nftables 1.0.4
.