У меня вопрос: «Как связать каждый из сетевых адаптеров моего сервера с отдельным IP-адресом?»
Мой сервер Ubuntu 12.04 имеет два сетевых контроллера - оба подключены к моей домашней сети.
У сетевых карт есть имена устройств, которые были установлены в /etc/udev/rules.d/70-persistent-net.rules. Я назвал lan0 и lan1. (см. ниже мой 70-persistent-net.rules).
Каждый сетевой адаптер корректно получает свои настройки IP через DHCP от моего маршрутизатора. Назначение IP выполняется на основе MAC-адреса запроса DHCP. lan0 назначается ip 172.23.80.1, а lan1 назначается 172.23.80.2. (см. ниже вывод ifconfig и мой /etc/network/interfaces).
Моя проблема в том, что когда я подключаюсь через ssh с отдельного компьютера, я всегда получаю соединение с того же MAC-адреса сервера, независимо от ip, который я использовал в вызове ssh.
Позвольте мне описать следующий эксперимент, который показывает мою проблему. Я использую три терминала (term1, term2 и term3) на моем настольном компьютере Ubuntu
term1:
arp -n
Address HWtype HWaddress Flags Mask Iface
172.16.0.1 ether 00:50:7f:9d:2d:30 C wlan0
172.23.80.1 (incomplete) wlan0
term2:
ssh me@172.23.80.1
me@172.23.80.1's password:
Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-29-generic-pae i686)
* Documentation: https://help.ubuntu.com/
Last login: Thu Aug 16 12:37:48 2012 from 172.23.128.11
me@FERMI:~$
term1:
arp -n
Address HWtype HWaddress Flags Mask Iface
172.16.0.1 ether 00:50:7f:9d:2d:30 C wlan0
172.23.80.1 ether 00:0d:61:22:3d:d6 C wlan0
term3:
ssh me@172.23.80.2
me@172.23.80.2's password:
Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-29-generic-pae i686)
* Documentation: https://help.ubuntu.com/
Last login: Thu Aug 16 13:37:12 2012 from 172.23.128.11
me@FERMI:~$
term1:
arp -n
Address HWtype HWaddress Flags Mask Iface
172.23.80.2 ether 00:0d:61:22:3d:d6 C wlan0
172.16.0.1 ether 00:50:7f:9d:2d:30 C wlan0
172.23.80.1 ether 00:0d:61:22:3d:d6 C wlan0
Как видно из этого последнего arp, оба ssh-соединения обслуживаются одним NIC на сервере, хотя Два IP-адреса были назначены для разных сетевых карт. Это моя проблема.
Вот моя конфигурация сервера:
me@FERMI:~$ ifconfig
lan0 Link encap:Ethernet HWaddr 00:0d:61:22:3d:d6
inet addr:172.23.80.1 Bcast:172.31.255.255 Mask:255.240.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1452 errors:0 dropped:0 overruns:0 frame:0
TX packets:496 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:113691 (113.6 KB) TX bytes:72934 (72.9 KB)
lan1 Link encap:Ethernet HWaddr 00:19:5b:68:93:57
inet addr:172.23.80.2 Bcast:172.31.255.255 Mask:255.240.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1103 errors:0 dropped:0 overruns:0 frame:0
TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:85747 (85.7 KB) TX bytes:684 (684.0 B)
Interrupt:22 Base address:0x9000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:14 errors:0 dropped:0 overruns:0 frame:0
TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:700 (700.0 B) TX bytes:700 (700.0 B)
me@FERMI:~$ cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto lan0
iface lan0 inet dhcp
auto lan1
iface lan1 inet dhcp
me@FERMI:~$ cat /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.
# PCI device 0x1186:/sys/devices/pci0000:00/0000:00:1e.0/0000:03:02.0 (sundance)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:19:5b:68:93:57", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="lan1"
# PCI device 0x8086:/sys/devices/pci0000:00/0000:00:03.0/0000:02:01.0 (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0d:61:22:3d:d6", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="lan0"
me@FERMI:~$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default OHM.UNIVERSE 0.0.0.0 UG 100 0 0 lan0
172.16.0.0 * 255.240.0.0 U 0 0 0 lan0
172.16.0.0 * 255.240.0.0 U 0 0 0 lan1
me@FERMI:~$ cat /proc/sys/net/ipv4/ip_forward
0
me@FERMI:~$ arp -n
Address HWtype HWaddress Flags Mask Iface
172.23.128.11 ether 00:18:de:02:f0:5c C lan0
172.16.0.1 ether 00:50:7f:9d:2d:30 C lan0
me@FERMI:~$ sudo ufw status
Status: inactive
Ваш NIC обязан разделить IP. Проблемой является маршрут по умолчанию. Вывод route
шоу, что маршрутизация по умолчанию идет через lan0 NIC.
Для разрешения требования просто удаляют маршрут по умолчанию с ip route del default
или route del default
.
Однако после этого, Вы привычка смочь направить к внешней стороне Вашу сеть. Если Вы хотите, то полезно создать две подсети, например, 172.23.80.0 и 172.23.81.0 и маршрут отдельно с через ip route 172.23.80.0/24 via 172.23.80.1 dev lan0
и ip route 172.23.81.0/24 via 172.23.81.1 dev lan1
. Например
#/etc/network/interfaces
# первичный сетевой интерфейс
автоматический lan1
iface lan1 inet dhcp
пост направляет del значение по умолчанию
пост, IP направляет 172.23.81.0/24 через 172.23.81.1 dev lan1
, Также возможный, но непротестированный
маршрут del значение по умолчанию
IP маршрут добавляет, что 172.23.80.1/32 через маршрут 172.23.80.1 dev lan0
ip добавляют 172.23.80.2/32 через 172.23.80.2 dev lan1
Вы могли использовать iptables
для насильственного изменения исходящего MAC/IP-адресов для пакетов к соединяющемуся компьютеру.
Так, я хотел бы снабдить это предисловием путем высказывания моего iptables
, навыки не тверды. Но я полагаю, что @chronospoon корректен о дефиците ответа @bersch, даже при том, что это смотрит почти там.
Так или иначе, я ищу немного и нашел LARTC (Расширенная маршрутизация Linux и Управление трафиком) . Существует практическое руководство на доступ разделения , который похож на него, объясняет точно, что Вы хотите. Я заключу в кавычки:
первое - то, как направить ответы на пакеты, входящие по конкретному поставщику, сказать Поставщика 1, отступает снова по тому же самому поставщику.
Позволяют нам сначала определить некоторые символические имена. Позвольте $IF1 быть названием первого интерфейса (if1 в изображении выше) и $IF2 название второго интерфейса. Затем позвольте $IP1 быть IP-адресом, связанным с $IF1 и $IP2 IP-адрес, связанный с $IF2. Затем, позвольте $P1 быть IP-адресом шлюза в Provider 1 и $P2 IP-адрес шлюза в поставщике 2. Наконец, позвольте $P1_NET быть $P1 сети IP, находится в, и $P2_NET, в котором находится $P2 сети IP.
Каждый создает две дополнительных таблицы маршрутизации, скажите T1 и T2. Они добавляются в/etc/iproute2/rt_tables. Затем Вы настраиваете маршрутизацию в этих таблицах следующим образом:
ip route add $P1_NET dev $IF1 src $IP1 table T1
ip route add default via $P1 table T1
ip route add $P2_NET dev $IF2 src $IP2 table T2
ip route add default via $P2 table T2
Ничто захватывающее, просто создайте маршрут к шлюзу и создайте значение по умолчанию, направляют через тот шлюз, как Вы сделали бы в случае единственного восходящего поставщика, но помещать маршруты в отдельную таблицу на поставщика. Обратите внимание, что сетевой маршрут достаточен, как он говорит Вам, как найти любой хост в той сети, которая включает шлюз, как указано выше. Затем Вы настраиваете основную таблицу маршрутизации. Это - хорошая идея направить вещи прямому соседу через интерфейс, подключенный к тому соседу. Отметьте 'src' аргументы, они удостоверяются, что правильный исходящий IP-адрес выбран.
ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2
Затем Ваше предпочтение маршрута по умолчанию:
ip route add default via $P1
Затем, Вы настраиваете правила маршрутизации. Они на самом деле выбирают что таблицу маршрутизации направить с. Вы хотите удостовериться, что Вы направляете данный интерфейс, если у Вас уже есть соответствующий исходный адрес:
ip rule add from $IP1 table T1
ip rule add from $IP2 table T2
Этот набор команд удостоверяется, что всем ответам для торговли вхождения в конкретном интерфейсе отвечают от того интерфейса.
Предупреждение
примечания Читателя Rod Roark: 'Если $P0_NET является локальной сетью, и $IF0 является своим интерфейсом, следующие дополнительные записи желательны:
ip route add $P0_NET dev $IF0 table T1
ip route add $P2_NET dev $IF2 table T1
ip route add 127.0.0.0/8 dev lo table T1
ip route add $P0_NET dev $IF0 table T2
ip route add $P1_NET dev $IF1 table T2
ip route add 127.0.0.0/8 dev lo table T2
'
Теперь, это - просто очень простая установка. Это будет работать на все процессы, работающие на самом маршрутизаторе, и на локальную сеть, если это будет подменено. Если это не, то у Вас или есть пространство IP от обоих поставщиков, или Вы собираетесь хотеть подменить одному из этих двух поставщиков. В обоих случаях Вы захотите добавить выбор правил который поставщик направить из на основе IP-адреса машины в локальной сети.