IP-псевдонимы FreeBSD в разных подсетях и исходящий IP-адрес по умолчанию
У меня есть FreeBSD VPS, который до недавнего времени назначал 3 общедоступных IP-адреса в подсети /29. При создании исходящих подключений всегда использовался IP-адрес с псевдонимом ".20", однако теперь я добавил еще один блок из 3 IP-адресов в другой подсети /29, и исходящий IP-адрес изменился на ".44".
Ниже приведены настройки rc.conf до и после добавления псевдонимов второй подсети.
До:
ifconfig_em0="inet 70.70.70.20 netmask 255.255.255.248"
ifconfig_em0_alias0="inet 70.70.70.21 netmask 255.255.255.248"
ifconfig_em0_alias1="inet 70.70.70.22 netmask 255.255.255.248"
defaultrouter="70.70.70.17"
Сейчас:
ifconfig_em0="inet 70.70.70.20 netmask 255.255.255.248"
ifconfig_em0_alias0="inet 70.70.70.21 netmask 255.255.255.248"
ifconfig_em0_alias1="inet 70.70.70.22 netmask 255.255.255.248"
ifconfig_em0_alias2="inet 60.60.60.44 netmask 255.255.255.248"
ifconfig_em0_alias3="inet 60.60.60.45 netmask 255.255.255.248"
ifconfig_em0_alias4="inet 60.60.60.46 netmask 255.255.255.248"
defaultrouter="70.70.70.17"
Читая ручную запись для ifconfig, я не уверен в правильной маске сети для псевдонимов. Ручная запись гласит:
alias Establish an additional network address for this interface. This
is sometimes useful when changing network numbers, and one wishes
to accept packets addressed to the old interface. If the address
is on the same subnet as the first network address for this
interface, a non-conflicting netmask must be given. Usually
0xffffffff is most appropriate.
Вопрос 1: это будет правильная конфигурация? (обратите внимание, псевдоним2)
ifconfig_em0="inet 70.70.70.20 netmask 255.255.255.248"
ifconfig_em0_alias0="inet 70.70.70.21 netmask 255.255.255.255"
ifconfig_em0_alias1="inet 70.70.70.22 netmask 255.255.255.255"
ifconfig_em0_alias2="inet 60.60.60.44 netmask 255.255.255.248"
ifconfig_em0_alias3="inet 60.60.60.45 netmask 255.255.255.255"
ifconfig_em0_alias4="inet 60.60.60.46 netmask 255.255.255.255"
defaultrouter="70.70.70.17"
Когда я попробовал этот подход, исходящий IP-адрес по умолчанию изменился на ".46".
Вопрос 2: Как я могу определить IP-адрес по умолчанию, используемый для исходящих соединений, если, например, я хочу, чтобы это было 70.70.70.21?
Ниже приведены таблицы маршрутизации и информация об интерфейсе:
Таблицы маршрутизации
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 70.70.70.17 UGS 0 2000863 em0
60.60.60.40/29 link#1 U 0 12 em0
60.60.60.44 link#1 UHS 0 18291 lo0
60.60.60.45 link#1 UHS 0 0 lo0
60.60.60.46 link#1 UHS 0 5 lo0
70.70.70.16/29 link#1 U 0 0 em0
70.70.70.20 link#1 UHS 0 6 lo0
70.70.70.21 link#1 UHS 0 0 lo0
70.70.70.22 link#1 UHS 0 0 lo0
127.0.0.1 link#3 UH 0 203 lo0
Таблицы маршрутизации (с маской.255)
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 70.70.70.17 UGS 0 2015436 em0
60.60.60.40/29 link#1 U 0 12 em0
60.60.60.44 link#1 UHS 0 18295 lo0
60.60.60.45 link#1 UHS 0 0 lo0 =>
60.60.60.45/32 link#1 U 0 0 em0
60.60.60.46 link#1 UHS 0 9 lo0 =>
60.60.60.46/32 link#1 U 0 0 em0
70.70.70.16/29 link#1 U 0 0 em0
70.70.70.20 link#1 UHS 0 6 lo0
70.70.70.21 link#1 UHS 0 0 lo0 =>
70.70.70.21/32 link#1 U 0 0 em0
70.70.70.22 link#1 UHS 0 0 lo0 =>
70.70.70.22/32 link#1 U 0 0 em0
127.0.0.1 link#3 UH 0 205 lo0
ifconfig em0
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
ether 00:11:22:33:44:55
inet 70.70.70.20 netmask 0xfffffff8 broadcast 70.70.70.23
inet 70.70.70.21 netmask 0xfffffff8 broadcast 70.70.70.23
inet 70.70.70.22 netmask 0xfffffff8 broadcast 70.70.70.23
inet 60.60.60.44 netmask 0xfffffff8 broadcast 60.60.60.47
inet 60.60.60.45 netmask 0xfffffff8 broadcast 60.60.60.47
inet 60.60.60.46 netmask 0xfffffff8 broadcast 60.60.60.47
media: Ethernet autoselect (1000baseT <full-duplex>)
status: active
ifconfig em0 (с маской сети.255)
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
ether 00:11:22:33:44:55
inet 70.70.70.20 netmask 0xfffffff8 broadcast 70.70.70.23
inet 60.60.60.44 netmask 0xfffffff8 broadcast 60.60.60.47
inet 70.70.70.21 netmask 0xffffffff broadcast 70.70.70.21
inet 70.70.70.22 netmask 0xffffffff broadcast 70.70.70.22
inet 60.60.60.45 netmask 0xffffffff broadcast 60.60.60.45
inet 60.60.60.46 netmask 0xffffffff broadcast 60.60.60.46
media: Ethernet autoselect (1000baseT <full-duplex>)
status: active
IPFW
00100 allow ip from any to any via lo0
00200 deny ip from any to 127.0.0.0/8
00300 deny ip from 127.0.0.0/8 to any
00400 deny tcp from any to any frag
00500 check-state
00600 allow tcp from any to any established
00700 allow ip from any to any out keep-state
00800 allow icmp from any to any
00900 allow tcp from any to any dst-port 80,443 in
01200 allow tcp from any to any dst-port 20-22,25,80,443 out
01300 allow udp from any to any dst-port 53 out
65535 deny ip from any to any
Заранее спасибо за любые подсказки!:)
1 ответ
Все псевдонимы в существующем диапазоне должны иметь сетевую маску /32 (255.255.255.255). Так что этот пример, который вы дали, верен -
ifconfig_em0="inet 70.70.70.20 netmask 255.255.255.248"
ifconfig_em0_alias0="inet 70.70.70.21 netmask 255.255.255.255"
ifconfig_em0_alias1="inet 70.70.70.22 netmask 255.255.255.255"
ifconfig_em0_alias2="inet 60.60.60.44 netmask 255.255.255.248"
ifconfig_em0_alias3="inet 60.60.60.45 netmask 255.255.255.255"
ifconfig_em0_alias4="inet 60.60.60.46 netmask 255.255.255.255"
defaultrouter="70.70.70.17"
Это должно означать, что 70.70.70.20 используется для нормального исходящего трафика. Вы не можете определить его, скорее, он всегда будет использовать основной IP-адрес на карте и первый IP-адрес в новом наборе псевдонимов подсети.
Тем не менее, для целей тестирования существует множество инструментов, которые позволяют использовать исходные тексты. Например, "ping -S 70.70.70.22 xxxx", telnet также делает и т.д.