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

Как использовать iptables для маршрутизации пакета с определенным IP-адресом назначения через определенный интерфейс

У меня есть установка Linux Box в качестве маршрутизатора, используя этот учебник: https://help.ubuntu.com/community/Router

На этой машине есть 2 сетевых интерфейса и один VPN: eth0 - основной интернет-интерфейс, eno1 - интрасеть, а tun0 - интерфейс VPN.

В соответствии с руководством я использую приведенный ниже сценарий для маршрутизации всего, что приходит с eno1 через vpn:

iptables-restore <<-EOF
*nat
-A POSTROUTING -o tun0 -j MASQUERADE
COMMIT

*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -i tun0 -o eno1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i eno1 -o tun0 -j ACCEPT
-A FORWARD -j LOG
COMMIT
EOF

Это прекрасно работает. Но теперь я хочу маршрутизировать все пакеты, поступающие с eno1 и с IP-адресом назначения 203.205.147.173 через eth0.

Какие правила iptables я должен добавить в свой скрипт?

редактировать

Я изменил сценарий, чтобы пометить все пакеты на 203.205.147.173:

iptables-restore <<-EOF
*nat
-A POSTROUTING -o tun0 -j MASQUERADE
COMMIT

*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -i tun0 -o eno1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i eno1 -o tun0 -j ACCEPT
-A FORWARD -j LOG
COMMIT

*mangle
-A PREROUTING -i "$INTIF" -d 203.205.0.0/16 -j MARK --set-mark 0x15
COMMIT
EOF

Затем я создаю таблицу X:

sudo nano /etc/iproute2/rt_tables, затем добавьте 1 tableX в конце файла.

Затем добавьте правило и маршрут:

sudo ip rule add fwmark 0x15 lookup tableX
sudo ip route add default via 192.168.5.1 dev eth0 table tableX
sudo ip route add 203.205.0.0/16 via 192.168.5.1 dev eth0 table tableX

но traceroute 203.205.147.173 тайм-аут:

traceroute to 203.205.147.173 (203.205.147.173), 64 hops max, 52 byte packets
 (192.168.8.1)  2.384 ms  1.060 ms  1.027 ms
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *

Я думаю, что добавляю неправильный маршрут в tableX. Любые предложения о том, как инициализировать tableX?

Обратите внимание, что ip маршрутизатора eth0 - 192.168.5.1, а ip маршрутизатора eno1 - 192.168.8.1.

Сам iptables ничего не маршрутизирует, но может повлиять на решение о маршрутизации с помощью меток межсетевого экрана. Вы добавляете другие таблицы маршрутизации с помощью инструмента ip (что-то вроде ip route add <route> ... table X, затем добавьте правила для маршрутизации пакетов по метке брандмауэра (ip rule add fwmark 0x1 lookup X) и пометьте пакеты правилами iptables (iptables -t mangle -A PREROUTING ... -j MARK --set-mark 0x1). После этого шага отмеченные пакеты будут маршрутизироваться через таблицу маршрутизации X. Дополнительную информацию вы можете получить в LARTC (расширенная маршрутизация и управление трафиком в Linux).

Вам нужно добавить строку вроде:

-A FORWARD -i eno1 -o eth0 -d 203.205.147.173 -j ACCEPT

Возможно, вам потребуется добавить его перед LOG правило.