Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net


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

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

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

Перевод: Станислав Рогин, SWSoft Pte Ltd.

Главный сайт: 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 SWSoft Pte Ltd. Все права зарезервированы.

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

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

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

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