У меня есть эта конфигурация, взятая из официальных и неофициальных руководств и вопросов здесь, а также из множества неудавшихся тестов. CentOS 7 и сервер Ubuntu 15 (LAMP и только eth0).
/ и т.д. / iproute2 / rt_tables
1 tunnel0
ПОДГОТОВИВАЮ МАРШРУТЫ И МАРКИ
ip route add 0.0.0.0/0 dev tun0 table 1
ip rule add from all fwmark 1 table 1
ip route flush cache
(также пытался использовать идентификатор таблицы, чтобы объявить через "10.123.123.x" с адресом tun0 и шлюзом tun0 ...)
IPTABLES
iptables -A PREROUTING -t mangle -p tcp --dport 80 -j MARK --set-mark 1
iptables-save
Я вижу общедоступный IP-адрес eth0 ISP вместо tun0, который, как я вижу, заставляет статический маршрут «добавить маршрут». Что мне не хватает? Спасибо.
Я решил и задокументировал это здесь: http://aftermanict.blogspot.it/2015/11/bash-iptables-iproute2-and-multiple.html
Это заставит ядро постоянно маршрутизировать пакеты, разрешит несколько маршрутов и даже для сетей, не аттестованных на машине:
nano /etc/sysctl.conf
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.all.rp_filter = 2
net.ipv4.ip_forward = 1
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 >| $f ; done
Это инициализирует iptables и, в частности, mangle и nat, которые необходимы для маркировки трафика:
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
добавить редактирование альтернативных маршрутов:
nano /etc/iproute2/rt_tables
Добавьте (имена - ваши ссылки):
1 tunnel0
2 tunnel1
добавляя маршруты и правила, мы используем идентификаторы таблиц вместо имен, которые являются более непосредственными. Как вы могли заметить, шлюз не имеет значения, особенно для туннелей, которые могут иметь динамические шлюзы:
ip route add 0.0.0.0/0 dev tun0 table 1
ip route add 0.0.0.0/0 dev tun1 table 2
добавить правила для маркировки трафика и привязки к соответствующей таблице:
ip rule add from all fwmark 1 table 1
ip rule add from all fwmark 2 table 2
ip route flush cache
проверьте, нравится ли вам:
ip route show table 1
ip route show table 2
ip rule show
если вы что-то упустили, можете удалить так:
ip rule del table 1
ip route flush table 1
СЕЙЧАС НУЖНАЯ ЧАСТЬ: ЭТО НЕ РАБОТАЕТ:
iptables -A PREROUTING -t mangle -p tcp --dport 80 -j MARK --set-mark 1
ЭТО БУДЕТ:
iptables -A OUTPUT -t mangle -p tcp --dport 80 -j MARK --set-mark 1
iptables-save
Вам нужно выбрать трафик и одновременно протолкнуть его в устройство / туннель? Нет проблем, я тоже решил:
iptables -A OUTPUT -t mangle -p tcp --dport 10001 -j MARK --set-mark 1
iptables -A OUTPUT -t mangle -p tcp --dport 10002 -j MARK --set-mark 2
iptables -t nat -A OUTPUT -p tcp --dport 10001 -j DNAT --to :80
iptables -t nat -A OUTPUT -p tcp --dport 10002 -j DNAT --to :80
NAT обязателен для ответа
iptables -t nat -A POSTROUTING -o $DEV1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o $DEV2 -j MASQUERADE
iptables-save