У меня есть установка 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
правило.