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

Ubuntu Iptables Dual Wan - перенаправить WAN 1 и 2 на внутренний сервер

У меня проблемы с настройкой правил iptables при настройке двойного WAN. ОС - Ubuntu 12.04 LTS.

У меня есть 2 Wan-соединения, оба со статическим IP. Wan-1 находится на eth2, Wan-2 - на eth4. Я хочу, чтобы они оба перенаправлялись на одни и те же внутренние серверы.

Правила Wan-1 работают, и я могу получить доступ ко всем внутренним серверам без проблем, но я не могу получить доступ к серверам при использовании Wan-2.

Wan-1: (not the real IP addresses)

IP: 17.13.12.90
CIDR: 17.13.12.90/29
Netmask: 255.255.255.248
Gateway: 17.13.12.89

Wan-2: (not the real IP addresses)

IP: 17.13.12.174
CIDR: 17.13.12.174/29
Netmask: 255.255.255.248
Gateway: 17.13.12.169

Wan-1 (eth2) - текущий шлюз по умолчанию, здесь все работает. Я могу получить доступ к внутренним серверам из Интернета. Без проблем. Я могу пинговать его извне и подключиться через SSH.

Wan-2 (eth4) - это новое соединение с WAN, которое я устанавливаю. Я могу пинговать его извне и подключиться к нему по SSH. Но я не могу подключиться к внутренним серверам с этого IP.

Локальная сеть - eth0.

Мой файл / etc / iproute2 / rt_tables выглядит так:

#
# reserved values
#
255 local
254 main
253 default
0   unspec
#
# local
#
10  isp1
20  isp2

Я установил следующие правила IP:

ip route add 17.13.12.88 dev eth2 src 17.13.12.90 table isp1
ip route add default via 177.135.127.89 table isp1
ip route add 17.22.17.168 dev eth4 src 17.22.17.174 table isp2
ip route add default via 17.22.17.169 table isp2

ip route add 17.13.12.88 dev eth2 src 17.13.12.90
ip route add 17.22.17.168 dev eth4 src 17.22.17.174

ip route add default via 17.13.12.89

ip rule add from 17.13.12.90 table isp1
ip rule add from 17.22.17.174 table isp2
ip rule add fwmark 0x1 table isp1
ip rule add fwmark 0x2 table isp2

Это правила iptables, касающиеся таблицы mangle:

$IPT -t mangle -A PREROUTING -p tcp -j CONNMARK --restore-mark

# Input rules
$IPT -t mangle -A INPUT -i $IF_ETH2 -p tcp -j MARK --set-mark 0xa
$IPT -t mangle -A INPUT -i $IF_ETH4 -p tcp -j MARK --set-mark 0xb

$IPT -t mangle -A PREROUTING -i $IF_ETH0 -m mark --mark 0xa -p tcp -j MARK --set-mark 0x1
$IPT -t mangle -A PREROUTING -i $IF_ETH0 -m mark --mark 0xb -p tcp -j MARK --set-mark 0x2

# output rules
$IPT -t mangle -A OUTPUT -m mark --mark 0xa -p tcp -j MARK --set-mark 0x1
$IPT -t mangle -A OUTPUT -m mark --mark 0xb -p tcp -j MARK --set-mark 0x2

Может ли кто-нибудь указать мне / помочь мне, почему соединения, исходящие от wan-2, не пересылаются на внутренние серверы? Правила кажутся нормальными, но, возможно, я что-то упускаю.

Я решил проблему. Это было связано с фильтром обратного пути. Я поместил это в свой сценарий:

echo 0 > /proc/sys/net/ipv4/conf/default/rp_filter

Но когда я устранял проблему, я понял, что это значение было 1 во всех интерфейсах (кроме по умолчанию):

$ cat /proc/sys/net/ipv4/conf/*/rp_filter 
1
0
1
1
1
1
1
1
1
1

Я установил значения равными нулю и изменил правила iptables согласно этой статье:

http://nerdboys.com/2006/05/05/conning-the-mark-multiwan-connections-using-iptables-mark-connmark-and-iproute2/

Это мой скрипт iptables (его часть):

# Disabling rp_filter   
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/default/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth2/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth4/rp_filter

# Mangle rules
$IPT -t mangle -A PREROUTING -p tcp -j CONNMARK --restore-mark
$IPT -t mangle -A PREROUTING -p tcp -i $IF_ETH2 -j MARK --set-mark 0x1
$IPT -t mangle -A PREROUTING -p tcp --match mark --mark 0x2 -j ACCEPT
$IPT -t mangle -A PREROUTING -p tcp -i $IF_ETH4 -j MARK --set-mark 0x2
$IPT -t mangle -A PREROUTING -p tcp -j CONNMARK --save-mark 

На данный момент я использую следующие настройки. Предположим, 192.168.127.10 это наш внутренний сервер и xxx.xxx.xxx.xxx/yyy.yyy.yyy.yyy ip-адреса wan1 / wan2

# iptables -t mangle -I PREROUTING -s 192.168.127.10 -m conntrack --ctorigdst xxx.xxx.xxx.xxx -j MARK --set-mark 0x3e8
# iptables -t mangle -I PREROUTING -s 192.168.127.10 -m conntrack --ctorigdst yyy.yyy.yyy.yyy -j MARK --set-mark 0x7d0

# ip ru add fwmark 0x3e8 lookup ISP1 prio 1000
# ip ru add fwmark 0x7d0 lookup ISP2 prio 2000

Настройка базовой маршрутизации политики по умолчанию

# cat /root/routing/set_default_routing.sh
#!/bin/sh

IP1='xxx.xxx.xxx.xxx'
IF1='eth2'
P1='xxx.xxx.xxx.1'
P1_NET='xxx.xxx.xxx.0/29'

IP2='yyy.yyy.yyy.yyy'
IF2='eth4'
P2='yyy.yyy.yyy.25'
P2_NET='yyy.yyy.yyy.0/29'

/sbin/ip route add $P1_NET dev $IF1 src $IP1 table ISP1
/sbin/ip route add default via $P1 table ISP1

/sbin/ip route add $P2_NET dev $IF2 src $IP2 table ISP2
/sbin/ip route add default via $P2 table ISP2

/sbin/ip rule add from $IP1 table ISP1
/sbin/ip rule add from $IP2 table ISP2

/sbin/ip route add default via $P1
/sbin/ip route flush cache

P.S. не забудьте отключить фильтр обратного пути

# echo 0 > /proc/sys/net/ipv4/conf/default/rp_filter

Добавьте следующую строку в /etc/sysctl.conf

net.ipv4.conf.default.rp_filter = 0