Подвійне мережеве з'єднання


9

У моєму вікні Ubuntu 10.10 у мене є мобільний модуль usb та підключення до домашньої локальної мережі.

Обидва працюють незалежно.

Я хочу знати, як одночасно підключитися і можу вказати, яка програма використовує, який пристрій підключається до Інтернету.

Хтось знає, як це зробити?

Відповіді:


11

Є кілька можливостей, залежно від того, як ви хочете вирішити, які пакети куди йти. Більшість із них потребуватиме певного розуміння того, як мережа TCP / IP працює в Linux. Основними інструментами, які потрібно знати, щоб робити складні речі, є iptables(Ubuntu: iptables Встановити iptables ) та iproute2 ( ipкоманда) (Ubuntu: iproute Встановити iproute , iproute-doc Встановіть iproute-doc ).

Якщо ви можете повністю розрізнити цільову IP-адресу, це просто: маршрутизуйте IP-адреси відповідно до своїх побажань. Наприклад, наступні команди викликають всі пакети для 1.2.3. x і 1.2.4.2 для переходу через ppp0інші пакети та інші пакети eth0.

route add -net 1.2.3.4/24 ppp0
route add -host 1.2.4.2 ppp0
route add -net 0.0.0.0/0 eth0

Для більш складних вимог потрібно почати використовувати iptablesі ip route. Наприклад, наступні команди встановлюють спеціальні таблиці маршрутизації, щоб усі пакети, позначені 1, виходили через, eth0а всі пакети, позначені 2, виходили через ppp0(за винятком пакетів, призначених для localhostприєднання до інтерфейсу петлі).

ip rule add fwmark 1 table 1
ip route add 127.0.0.0/0 table 1 dev lo
ip route add 0.0.0.0/0 table 1 dev eth0
ip rule add fwmark 2 table 2
ip route add 127.0.0.0/8 table 2 dev lo
ip route add 0.0.0.0/0 table 2 dev ppp0

Тепер ви можете використовувати, iptablesщоб "погладити" вихідні пакети, додавши позначку, яка визначатиме, яким маршрутом вони рухаються. Наприклад, ось як надіслати весь вихідний SMTP-трафік (порт 25) через eth0і весь трафік, породжений програмою, що працює як користувач proxyчерез ppp0.

iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark 1
iptables -t mangle -A OUTPUT -m owner --uid-owner proxy -j MARK --set-mark 2

Дивіться також 2 мережеві інтерфейси, підключені до Інтернету. Виберіть той, який потрібно використовувати відповідно до доменного імені, і прив’яжіть програмне забезпечення до різних мережевих інтерфейсів .


Вам потрібно буде домовитись виконання цих команд, коли підключені обидва інтерфейси. Я рекомендую написати сценарій під назвою, /etc/network/if-up.d/0justin-routesякий виконує потрібні команди. Цей сценарій буде виконуватися щоразу, коли буде піднято мережевий інтерфейс; оскільки його ім'я починається з а, 0він запуститься на початку цього процесу, перед тим як встановити специфічну програму, яка може очікувати, що маршрути будуть встановлені. Є симетричний /etc/network/if-down.d/випадок, якщо ви також хочете робити щось, коли один з інтерфейсів виходить з ладу. (Усі асоційовані маршрути будуть автоматично стертись, що може залишити деякі пакети прокрученими, коли ви хочете, щоб вони повернулися до іншого інтерфейсу.)

Сценарії ifup задокументовані в interfaces(5) man page. Головне, що потрібно знати, - це те, що назва інтерфейсу, що виховується або знижується, знаходиться в змінній оточення IFACE. Ви можете дізнатися, чи не працює інший інтерфейс if ifconfig | sed 's/ .*//' | grep -Fqx 'eth0'; then ….


@Justin: Це не речі , які у мене є великий досвід роботи з, тому , будь ласка , дати зворотний зв'язок про те , що вийшло, що не зробила роботу, що ви не розумієте, і т.д.
Жиля SO- перестати бути злим »

1
У мене є два доповнення: По-перше, це надсилає трафік на ppp0 з адресою джерела від eth0. Ви можете змінити це за допомогою:, iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to-source ppp_ipде ppp_ipip-адреса цього адаптера. По- друге, вам потрібно буде відключити суворої rp_filterAT /proc/sys/net/ipv4/config/ppp0/rp_filter. Це спрацьовує, коли встановлено режим розслаблення, який становить 2.
Karalga
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.