Назад | Перейти на главную страницу

Перенаправление трафика с устройства TUN (серверная часть C ++) на шлюз по умолчанию

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

У меня есть Linux-машина с tun0 (туннельный интерфейс) и eth0 (ведьма - мой шлюз в Интернет по умолчанию).

Цель: Моя цель - получать пакеты, поступающие от tun0, и пересылать их на шлюз по умолчанию. На самом деле это довольно простой случай NAT, когда я хочу «поделиться» Интернетом с tun0, который подделывает физический интерфейс.

Тун был создан с использованием

sudo openvpn --mktun --dev tun0 --user USER
sudo ip addr add 10.2.0.1/24 dev tun0
sudo ip link set tun0 up

Итак, он у меня запущен, я могу пинговать его и т. Д. Кроме того, у меня есть приложение C ++, которое подключается к этому устройству TUN, может читать и писать в него. (fti: вот руководство, которому я следил: http://backreference.org/2010/03/26/tuntap-interface-tutorial/)

Я сбросил правильный запрос ICMP (ping), сделанный для 8.8.8.8, в массив байтов на C ++. Теперь, используя свою программу, я записываю ее на устройство tun0. Запрос ICMP имеет

Тогда у меня есть следующие маршруты:

iptables -F # flush
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface tun0 -j ACCEPT

И здесь я застрял: (Пакет не пересылается на gw по умолчанию (tshark видит его только на tun0 как полученный, что я думаю, это правильно)

Чего не хватает? Может быть, какой-нибудь альтернативный подход (но это нужно сделать с помощью устройства tun, и я должен иметь возможность r / w к нему). Дополнительная информация:

Заранее благодарим за любые подсказки!

Недавно я столкнулся с этой проблемой (после той же статьи, упомянутой в вопросе), и, немного поигравшись, я обнаружил, что следующая команда включает локальную пересылку пакетов для устройства tun.

echo 1 > /proc/sys/net/ipv4/conf/tun0/accept_local

Я знаю, что уже очень поздно, я просто пишу здесь, чтобы любой, кто сталкивается с той же проблемой, мог получить какую-то помощь.

Альтернативным решением было бы использование bridgeТаким образом, вы можете связать ваш tun0 с eth0, и нет необходимости в nat или настройке ip на tun0, вы просто помещаете IP-адреса из той же подсети eth0 и того же шлюза, который вы используете сейчас, на туннельные интерфейсы клиентов.

Команды для установки моста:

# brctl addbr br0
# brctl addif br0 eth0 tun0

www.tldp.org/HOWTO/BRIDGE-STP-HOWTO/set-up-the-bridge

Чтобы использовать brctl, вам необходимо установить bridge-utils пакет.
Если ваш дистрибутив Ubuntu: aptitude install bridge-utils