можно ли отправлять данные через NIC напрямую, а не через поиск в таблице маршрутизации (команда linux или python) - PullRequest
2 голосов
/ 16 декабря 2011

Предположим, у меня есть 3 NIC на одном хост-компьютере, назовите их eth0, eth1 и eth2

Все интерфейсы имеют свои собственные IP-адреса в разных подсетях, однако все шлюзы-маршрутизаторы этих сетевых карт имеют маршрут к одному серверу, к которому я хочу получить доступ, я хочу установить 3 подключения к этому серверу и получить ответ через различные сетевые карты.

Я установил статический маршрут с другой метрикой на этом хост-ПК, что означает, что все ethX имеют маршрут к серверу.

Возможно ли установить сеансы tcp через разные NIC напрямую в python или с помощью команд оболочки:

s1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s1.connect((HOST, PORT, eth1))         # eth1 is my fiction
# and in same program  
s0 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s0.connect((HOST, PORT, eth0))         # ethO is my fiction

тогда трафик может быть отправлен на этот адрес напрямую через поиск в таблице маршрутизации?

Спасибо!

1 Ответ

0 голосов
/ 20 декабря 2011

Проблема в том, что маршрутизация определяется пунктом назначения и только потому, что у вас есть несколько доступных маршрутов, не означает, что ОС фактически будет использовать эти несколько маршрутов. Вам нужно, чтобы ОС учитывала адрес источника при определении того, какой исходящий маршрут использовать. Как только вы настроите правильную маршрутизацию, вы можете привязать исходный IP-адрес к вашему сокету, и он получит нужную вещь.

В Linux вы делаете это, создавая несколько таблиц маршрутизации и устанавливая правила для выбора этих таблиц маршрутизации на основе исходного IP-адреса. В целом, документация для этого довольно плохая, но поиск «нескольких маршрутов по умолчанию» и iproute2 может помочь сузить его. Вот несколько разумных страниц: http://www.debian -administration.org / статьи / 377 http://lartc.org/howto/lartc.rpdb.multiple-links.html

OpenBSD также поддерживает несколько таблиц маршрутизации, и я считаю, что это немного проще настроить, не взламывая вещи в скриптах инициализации. (Вы даже можете сделать это в pf.conf)

...