Я хочу, чтобы виртуальная машина, размещенная на Google Compute Engine, имела 2 статических IP-адреса. Для этой цели я создал виртуальную машину с двумя сетевыми адаптерами (NIC), каждый из которых позволяет мне «выбирать» 1 статический IP-адрес из соответствующих сетей. Как говорится в документации GCE, это единственный возможный способ сделать виртуальную машину имеющей 2 адреса. Не может быть у одного адаптера более одного статического адреса :(
До сих пор мне удавалось заставить работать только один IP-адрес за раз. Никогда их обоих. Система - это Debian и моя /etc/network/interfaces
следующее:
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 10.0.1.2
netmask 255.255.255.0
network 10.0.1.0
broadcast 10.0.1.255
gateway 10.0.1.1
dns-nameservers 8.8.8.8 8.8.4.4
dns-search example.com
auto eth1
iface eth1 inet static
address 10.0.2.2
netmask 255.255.255.0
network 10.0.2.0
broadcast 10.0.2.255
... несмотря 'ifconfig'
вывод говорит, что все в порядке и даже показывает трафик на обоих интерфейсах (и сетевых адаптерах), никогда не может быть контакта с обоими IP-адресами (10.0.1.2
и 10.0.2.2
в то же время). Я могу подключиться только к 10.0.1.2
или 10.0.2.2
извне, в зависимости от того, какой из них я назначил eth0, и перезапустил сеть:
eth0 Link encap:Ethernet HWaddr 42:01:0a:00:01:02
inet addr:10.0.1.2 Bcast:10.0.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2552 errors:0 dropped:0 overruns:0 frame:0
TX packets:2553 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:306760 (306.7 KB) TX bytes:1392278 (1.3 MB)
eth1 Link encap:Ethernet HWaddr 42:01:0a:00:02:02
inet addr:10.0.2.2 Bcast:10.0.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:621 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:51913 (51.9 KB) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:149 errors:0 dropped:0 overruns:0 frame:0
TX packets:149 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:44874 (44.8 KB) TX bytes:44874 (44.8 KB)
lshw -class network
показывает:
*-network:0
description: Ethernet interface
product: Virtio network device
vendor: Red Hat, Inc
physical id: 4
bus info: pci@0000:00:04.0
logical name: eth0
version: 00
serial: 42:01:0a:00:01:02
width: 32 bits
clock: 33MHz
capabilities: msix bus_master cap_list ethernet physical
configuration: broadcast=yes driver=virtio_net driverversion=1.0.0 ip=10.0.1.2 latency=0 link=yes multicast=yes
resources: irq:10 ioport:c040(size=64) memory:febfe000-febfe03f
*-network:1
description: Ethernet interface
product: Virtio network device
vendor: Red Hat, Inc
physical id: 5
bus info: pci@0000:00:05.0
logical name: eth1
version: 00
serial: 42:01:0a:00:02:02
width: 32 bits
clock: 33MHz
capabilities: msix bus_master cap_list ethernet physical
configuration: broadcast=yes driver=virtio_net driverversion=1.0.0 ip=10.0.2.2 latency=0 link=yes multicast=yes
resources: irq:10 ioport:c080(size=64) memory:febff000-febff03f
P.S. Я добавляю результат команды iptables -nvL
:
Chain INPUT (policy ACCEPT 1578 packets, 354K bytes)
pkts bytes target prot opt in out source destination
8781 544K f2b-dovecot-pop3imap tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 110,995,143,993
1132 61887 f2b-pureftpd tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 21
1457 564K f2b-postfix-sasl tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 25
20120 2175K f2b-sshd tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 22
11287 688K f2b-dovecot-pop3imap tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 110,995,143,993
1511 82441 f2b-pureftpd tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 21
1773 585K f2b-postfix-sasl tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 25
30811 3348K f2b-sshd tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 22
12528 760K f2b-dovecot-pop3imap tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 110,995,143,993
1691 92225 f2b-pureftpd tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 21
1960 632K f2b-postfix-sasl tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 25
36156 3948K f2b-sshd tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 22
16013 963K f2b-dovecot-pop3imap tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 110,995,143,993
2352 128K f2b-pureftpd tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 21
2656 846K f2b-postfix-sasl tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 25
48399 5280K f2b-sshd tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 22
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 1735 packets, 987K bytes)
pkts bytes target prot opt in out source destination
Chain f2b-dovecot-pop3imap (4 references)
pkts bytes target prot opt in out source destination
48609 2955K RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
Chain f2b-postfix-sasl (4 references)
pkts bytes target prot opt in out source destination
7846 2628K RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
Chain f2b-pureftpd (4 references)
pkts bytes target prot opt in out source destination
6669 364K RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
Chain f2b-sshd (4 references)
pkts bytes target prot opt in out source destination
22 1728 REJECT all -- * * 52.21.230.131 0.0.0.0/0 reject-with icmp-port-unreachable
22 1728 REJECT all -- * * 185.207.232.232 0.0.0.0/0 reject-with icmp-port-unreachable
22 1728 REJECT all -- * * 136.159.103.234 0.0.0.0/0 reject-with icmp-port-unreachable
17 1232 REJECT all -- * * 118.97.22.162 0.0.0.0/0 reject-with icmp-port-unreachable
132K 15M RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
Также есть вывод команды route
:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.0.1.1 0.0.0.0 UG 0 0 0 eth0
10.0.1.0 * 255.255.255.0 U 0 0 0 eth0
10.0.2.0 * 255.255.255.0 U 0 0 0 eth1
Как заставить работать оба IP-адреса и обе NIC. Нет никакого пинга ни к одному из них извне, в зависимости от того, какой eth указан первым в /etc/network/interfaces
?
Наконец, мне это удалось. Мне помогла следующая статья: https://www.thomas-krenn.com/en/wiki/Two_Default_Gateways_on_One_System
Чтобы два сетевых адаптера могли работать одновременно с разными шлюзами, нам нужна вторая таблица маршрутизации. Назовем это rt2
. Пожалуйста, следуйте процедуре:
iproute2
установлены: sudo apt-get install iproute2
Добавить вторую таблицу маршрутизации путем редактирования /etc/iproute2/rt_tables
добавьте в файл следующую строку:
1 rt2
Убедитесь, что второй интерфейс eth1
не есть gateway
определены
В /etc/network/interfaces
добавьте следующие строки во второй интерфейс eth1
:
post-up ip route add 10.0.2.0/24 dev eth1 src 10.0.2.2 table rt2
post-up ip route add default via 10.0.2.1 dev eth1 table rt2
post-up ip rule add from 10.0.2.2/32 table rt2
post-up ip rule add to 10.0.2.2/32 table rt2
Изменения являются постоянными, и после перезагрузки у меня есть оба IP-адреса, доступные извне (входящие). При подключении изнутри наружу (исходящих) eth0
используется, поскольку это значение по умолчанию.
Мой последний /etc/network/interfaces
теперь выглядит так:
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 10.0.1.2
netmask 255.255.255.0
network 10.0.1.0
broadcast 10.0.1.255
gateway 10.0.1.1
dns-nameservers 8.8.8.8 8.8.4.4
dns-search example.com
auto eth1
iface eth1 inet static
address 10.0.2.2
netmask 255.255.255.0
network 10.0.2.0
broadcast 10.0.2.255
###################################################################### gateway 10.0.2.1
dns-nameservers 8.8.8.8 8.8.4.4
dns-search example.com
post-up ip route add 10.0.2.0/24 dev eth1 src 10.0.2.2 table rt2
post-up ip route add default via 10.0.2.1 dev eth1 table rt2
post-up ip rule add from 10.0.2.2/32 table rt2
post-up ip rule add to 10.0.2.2/32 table rt2
На первый взгляд вам не хватает:
gateway 10.0.1.1
dns-nameservers 8.8.8.8 8.8.4.4
для второго адаптера. Кроме того, каков ваш результат:
iptables -nvL
маршрут