Бит DF
Здравствуйте.
Можно ли изменить с помощью iptables значение бита DF (Don't Fragment)?
Спасибо.
Здравствуйте.
Можно ли изменить с помощью iptables значение бита DF (Don't Fragment)?
Спасибо.
Здравствуйте, уважаемые. Внизу представлен на Ваше внимание скрипт запуска маршрутизации через 2х провайдеров. Не получается настроить ответ по тому же каналу, откуда приходит пакет. Пакет всегда попадает в таблицу main и отправляется по default. Исходящие пакеты из локал сетей идут правильно, их маркировка работает. А вот пакеты приходящие на сам роутер, транзитные идут неправильно. Где у меня может быть ошибка? Особенно хотелось бы разобраться в последовательности применения и правильности команд для CONNMARK как для входящих на роутер, так и проходящих сквозь него пакетов ( Как я понимаю суть команд помечено в комментариях скрипта). Поправьте, где я ошибаюсь. СПАСИБО.
P.S. eth0 - 1 пров, eth1 - 2 пров. Маркировка 10 для 1 прова, 20 для 2-го.
#!/bin/bash
echo "1">/proc/sys/net/ipv4/ip_forward
echo "0">/proc/sys/net/ipv4/conf/all/rp_filter
iptables -t mangle -F
iptables -t nat -F
iptables -t filter -F
###---PREROUTING------
# Маркирую соединения из локальных сетей:
iptables -t mangle -A PREROUTING -s $NET_LOCAL1 -j CONNMARK --set-mark 10 # --set-mark 10 for PROV1
iptables -t mangle -A PREROUTING -s $NET_LOCAL2 -j CONNMARK --set-mark 20 # --set-mark 20 for PROV2
iptables -t mangle -A PREROUTING -s $NET_LOCAL3 -j CONNMARK --set-mark 10 # --set-mark 10 for PROV1
# Маркирую соединения с внешних интерфейсов:
iptables -t mangle -A PREROUTING -i eth0 -j CONNMARK --set-mark 10
iptables -t mangle -A PREROUTING -i eth1 -j CONNMARK --set-mark 20
# Маркирую все пакеты внутри соединений по меткам самих соединений:
iptables -t mangle -A PREROUTING -m connmark --mark 10 -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -m connmark --mark 20 -j CONNMARK --restore-mark
###---FORWARD---
# Для транзитных пакетов я пока не начать разбираться, так как не заработала маршрутизация на самом роутере.
###---INPUT---
# Устанавливаю маркировку пакетов по маркировке соединений (такое уже делается в PREROUTING, написал для контроля за счетчиками)
iptables -t mangle -A INPUT -m connmark --mark 10 -j CONNMARK --restore-mark
iptables -t mangle -A INPUT -m connmark --mark 20 -j CONNMARK --restore-mark
####--------OUTPUT----------
# В локальные сети не трогаем
iptables -t mangle -A OUTPUT -d $NET_LOCAL1 -j RETURN
iptables -t mangle -A OUTPUT -d $NET_LOCAL2 -j RETURN
iptables -t mangle -A OUTPUT -d $NET_LOCAL3 -j RETURN
# Выходящие пакеты маркируем по номерам соединений
iptables -t mangle -A OUTPUT -m connmark --mark 10 -j CONNMARK --restore-mark
iptables -t mangle -A OUTPUT -m connmark --mark 20 -j CONNMARK --restore-mark
###--------POSTROUTING----
# Здесь NAT
iptables -t nat -A POSTROUTING -s $NET_LOCAL3 -m mark --mark 10 -j ACCEPT
iptables -t nat -A POSTROUTING -s $NET_LOCAL2 -m mark --mark 20 -j ACCEPT
iptables -t nat -A POSTROUTING -m mark --mark 10 -j SNAT --to-source $IP_PROV1
iptables -t nat -A POSTROUTING -m mark --mark 20 -j SNAT --to-source $IP_NAT_PROV2
ip route flush table T_LOCAL
ip route flush table T_PROV1
ip route flush table T_PROV2
ip route add $NET_LOCAL1 dev $IF_LOCAL1 table T_LOCAL
ip route add $NET_LOCAL2 dev $IF_LOCAL2 table T_LOCAL
ip route add $NET_LOCAL3 dev $IF_LOCAL3 table T_LOCAL
ip route add $NET_PROV1 dev $IF_PROV1 src $IP_PROV1 table T_PROV1
ip route add 127.0.0.0/8 dev lo table T_PROV1
ip route add default via $GW_PROV1 dev eth0 table T_PROV1
ip route add $NET_PROV2 dev $IF_PROV2 src $IP_PROV2 table T_PROV2
ip route add 127.0.0.0/8 dev lo table T_PROV2
ip route add default via $GW_PROV2 dev eth1 table T_PROV2
#заполнение таблицы main
ip route del default
ip route add default via $GW_PROV1
ip rule show | grep -Ev '^(0|32766|32767):|iif lo' \
| while read PRIO NATRULE; do
ip rule del prio ${PRIO%%:*} $( echo $NATRULE | sed 's|all|0/0|' )
done
ip rule add from all lookup T_LOCAL pref 5
ip rule add fwmark 10 table T_PROV1 pref 10
ip rule add fwmark 20 table T_PROV2 pref 20
ip route flush cache
exit 0