Linux IP-Aliasing

Мини-HOWTO, описывающее, как настроить IP-алиасинг на машине с Linux

[Harish Pillay (h.pillay@ieee.org). Перевод Станислав Рогин (sam@asplinux.ru)]

Этот документ был последний раз обновлен 13 января 1997 года.

Мини-HOWTO, описывающее, как настроить IP-алиасинг на машине с Linux

GNU Copyleft 1996/1997 Harish Pillay (h.pillay@ieee.org)

Перевод: Станислав Рогин, ASPLinux

Главный сайт: http://home.pacific.net.sg/~harish/linuxipalias.html

Краткое содержание:

Это книга рецептов того, как настроить и запустить IP-алиасинг на Linux-машине. Дополнительно к этому, здесь находятся инструкции, как получать электронную почту по этим IP-адресам.

Мои настройки:

  • Самое последнее ядро (версия 2.0.27 - с сайта ftp.funet.fi:/pub/Linux/kernel/src/v2.0 ) - работало после версии 1.3.7x.
  • IP-алиасинг, собранный в виде загружаемого модуля. Во время исполнения команды "make config" вам будет необходимо при сборке ядра указать, что вы хотите, чтобы IP-маскарадинг был собран в виде модуля. См. Modules HOW-TO (если таковой существует) или прочитайте файл /usr/src/linux/Documentation/modules.txt.
  • Мне надо поддерживать 2 дополнительных IP-адреса помимо того, который я уже имею.
  • Сетевой адаптер DE-620 фирмы D-Link (это не очень важно, все это работает с любым поддерживаемым Linux-ом сетевым адаптером).

Команды:

  • Во-первых, загрузите модуль IP-алиасинга (вы можете пропустить этот шаг, если у вас это встроено внутрь ядра):
/sbin/insmod /lib/modules/`uname -r`/ipv4/ip_alias.o 
  • Во-вторых, настройте зацикленный адрес (loopback), eth0 и все IP-адреса, начиная с главного для интерфейса eth0 IP-адреса:
/sbin/ifconfig lo 127.0.0.1
/sbin/ifconfig eth0 up
/sbin/ifconfig eth0 172.16.3.1 
/sbin/ifconfig eth0:0 172.16.3.10
/sbin/ifconfig eth0:1 172.16.3.100

172.16.3.1 - это главный  IP-адрес, а 172.16.3.10 and 172.16.3 .100 - алиасы. Фокус, как вы уже заметили, состоит во фразе "eth0:x", где x=0,1,2,...n для различных IP-адресов. Главный IP-адрес не должен подвергаться алиасингу .

  • В-третьих, настроим маршрутизацию. Первым маршрутизируем зацикленный адрес (loopback), затем сеть и, в конце концов, IP-адреса, начиная с главного:
/sbin/route add -net 127.0.0.0 
/sbin/route add -net 172.16.3.0 dev eth0
/sbin/route add -host 172.16.3.1 dev eth0
/sbin/route add -host 172.16.3.10 dev eth0:0
/sbin/route add -host 172.16.3.100 dev eth0:1
/sbin/route add default gw 172.16.3.200 

И все.

В вышеприведенном примере я использовал личные IP-адреса ( RFC 1918 ), в целях иллюстрации. Замените их на ваши официальные или личные адреса.

В примере выше показаны только 3 IP-адреса. Максимум, заданный в /usr/include/linux/net_alias.h, равен 256. 256 IP-адресов - для ОДНОЙ карты это много! :-)

Вот что выдает моя команда /sbin/ifconfig:


lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Bcast:127.255.255.255  Mask:255.0.0.0
          UP BROADCAST LOOPBACK RUNNING  MTU:3584  Metric:1
          RX packets:5088 errors:0 dropped:0 overruns:0
          TX packets:5088 errors:0 dropped:0 overruns:0

eth0      Link encap:10Mbps Ethernet  HWaddr 00:8E:B8:83:19:20
          inet addr:172.16.3.1  Bcast:172.16.3.255  Mask:255.255.255.0
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:334036 errors:0 dropped:0 overruns:0
          TX packets:11605 errors:0 dropped:0 overruns:0
          Interrupt:7 Base address:0x378 

eth0:0    Link encap:10Mbps Ethernet  HWaddr 00:8E:B8:83:19:20
          inet addr:172.16.3.10  Bcast:172.16.3.255  Mask:255.255.255.0
          UP BROADCAST RUNNING  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0
          TX packets:0 errors:0 dropped:0 overruns:0

eth0:1    Link encap:10Mbps Ethernet  HWaddr 00:8E:B8:83:19:20
          inet addr:172.16.3.100  Bcast:172.16.3.255  Mask:255.255.255.0
          UP BROADCAST RUNNING  MTU:1500  Metric:1
          RX packets:1 errors:0 dropped:0 overruns:0
          TX packets:0 errors:0 dropped:0 overruns:0

А вот что содержит /proc/net/aliases:

device           family address                                
eth0:0           2      172.16.3.10                        
eth0:1           2      172.16.3.100

И, в свою очередь, /proc/net/alias_types:

type    name            n_attach
2       ip              2   

Конечно, все, что в /proc/net, создано ifconfig-ом, а не вручную!

Вопрос: Как сохранить настройки в процессе перезагрузки?

Ответ: Если вы используете загрузку в стиле BSD или SysV (напр. Redhat), то всегда можно добавить эти команды в /etc/rc.d/rc.local. Вот что записано у меня в системе с загрузкой в стиле SysV (Redhat 3.0.3 and 4.0):

  • Мой файл /etc/rc.d/rc.local: (только интересующая нас часть)
#Настраиваем интерфейсы с IP-алиасингом
echo "Установка IP-алиасов 172.16.3.1, 172.16.3.10, 172.16.3.100..."
/sbin/ifconfig lo 127.0.0.1
/sbin/ifconfig eth0 up
/sbin/ifconfig eth0 172.16.3.1
/sbin/ifconfig eth0:0 172.16.3.10
/sbin/ifconfig eth0:1 172.16.3.100
#Настройка маршрутизации
echo "Настройка IP-маршрутизации..."
/sbin/route add -net 127.0.0.0
/sbin/route add -net 172.16.3.0 dev eth0
/sbin/route add -host 172.16.3.1 eth0
/sbin/route add -host 172.16.3.10 eth0:0
/sbin/route add -host 172.16.3.100 eth0:1
/sbin/route add default gw 172.16.3.200 
#

Вопрос: Как настроить машину с IP-алиасингом для получения почты, идущей по различным IP-адресам (на машине, использующей sendmail)?

  • Ответ: Создайте (если еще не создали) файл с именем, например /etc/mynames.cw. Он не обязательно должен называться именно так и не обязательно должен находиться в каталоге /etc.
  • В этом файле напишите официальные имена доменов для этих IP-адресов. Если у них нет имен, то поместите туда просто сами IP-адреса.
/etc/mynames.cw:
----------------

# - это комментарий.
# вставьте сюда все алиасы для вашей машины 
# /etc/mynames.cw 
domain.one.net
domain.two.com
domain.three.org
4.5.6.7
  • В файле sendmail.cf, где определяется макрос класса файлов Fw, добавьте следующее:
.
.
.
########################
# Локальная информация #
########################
.
.
# Файл, содержащий имена хостов, для которых мы получаем почту
Fw/etc/mynames.cw
.
.
.
  • Это должно сработать. Проверьте новые настройки в тестовом режиме sendmail, в соответствии с примером:
ganymede$ /usr/lib/sendmail -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter < ruleset> < address>
> 0 me@4.5.6.7
rewrite: ruleset  0   input: me @ 4 . 5 . 6 . 7
rewrite: ruleset 98   input: me @ 4 . 5 . 6 . 7
rewrite: ruleset 98 returns: me @ 4 . 5 . 6 . 7
rewrite: ruleset 97   input: me @ 4 . 5 . 6 . 7
rewrite: ruleset  3   input: me @ 4 . 5 . 6 . 7
rewrite: ruleset 96   input: me < @ 4 . 5 . 6 . 7 >
rewrite: ruleset 96 returns: me < @ 4 . 5 . 6 . 7 . >
rewrite: ruleset  3 returns: me < @ 4 . 5 . 6 . 7 . >
rewrite: ruleset  0   input: me < @ 4 . 5 . 6 . 7 . >
rewrite: ruleset 98   input: me < @ 4 . 5 . 6 . 7 . >
rewrite: ruleset 98 returns: me < @ 4 . 5 . 6 . 7 . >
rewrite: ruleset  0 returns: $# local $: me
rewrite: ruleset 97 returns: $# local $: me
rewrite: ruleset  0 returns: $# local $: me
> 0 me@4.5.6.8
rewrite: ruleset  0   input: me @ 4 . 5 . 6 . 8
rewrite: ruleset 98   input: me @ 4 . 5 . 6 . 8
rewrite: ruleset 98 returns: me @ 4 . 5 . 6 . 8
rewrite: ruleset 97   input: me @ 4 . 5 . 6 . 8
rewrite: ruleset  3   input: me @ 4 . 5 . 6 . 8
rewrite: ruleset 96   input: me < @ 4 . 5 . 6 . 8 >
rewrite: ruleset 96 returns: me < @ 4 . 5 . 6 . 8 >
rewrite: ruleset  3 returns: me < @ 4 . 5 . 6 . 8 >
rewrite: ruleset  0   input: me < @ 4 . 5 . 6 . 8 >
rewrite: ruleset 98   input: me < @ 4 . 5 . 6 . 8 >
rewrite: ruleset 98 returns: me < @ 4 . 5 . 6 . 8 >
rewrite: ruleset 95   input: < > me < @ 4 . 5 . 6 . 8 >
rewrite: ruleset 95 returns: me < @ 4 . 5 . 6 . 8 >
rewrite: ruleset  0 returns: $# smtp $@ 4 . 5 . 6 . 8 $: me < @ 4 . 5 . 6 . 8 >
rewrite: ruleset 97 returns: $# smtp $@ 4 . 5 . 6 . 8 $: me < @ 4 . 5 . 6 . 8 >
rewrite: ruleset  0 returns: $# smtp $@ 4 . 5 . 6 . 8 $: me < @ 4 . 5 . 6 . 8 >
> 

Заметьте, что, когда я тестировал me@4.5.6.7, почта доставлена на локальную машину, а me@4.5.6.8 была передана smtp-mailer-у. Так и должно быть.

  • У вас все настроено.

Надеюсь, все вышесказанное кому-нибудь пригодится.

Спасибо всем, кто провел титаническую работу над Linux-ом и IP-алиасингом. И особенно Juan Jose Ciarlante за ответы на мои вопросы.

Честь и слава программистам-асам!

Если вам пригодился этот документ, или у вас есть предложения или дополнения, пишите мне по адресу h.pillay@ieee.org.

Наслаждайтесь.


Вопросы?


Авторские права

Авторские права на русский перевод этого текста принадлежат ї 2000 ASPLinux Все права зарезервированы.

Этот документ является частью проекта Linux HOWTO.

Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе, физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но, так или иначе, автор текста и автор перевода желали бы знать о таких дистрибутивах.

Все переводы и производные работы, выполненные по документам Linux HOWTO, должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO, с которым можно связаться по адресу приведенному ниже.

Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: или к координатору русского перевода Linux HOWTO компании ASPLinux по адресу

[Источник: www.linuxdoc.ru]

[ опубликовано 19/09/2003 ]

Harish Pillay (h.pillay@ieee.org). Перевод Станислав Рогин (sam@asplinux.ru) - Linux IP-Aliasing   Версия для печати