LINUX.ORG.RU
решено ФорумAdmin

Что-то пошло не так... 1 интерфейс с lan в 3 интерфейса одной подсети.

 ,


0

1

Есть: 1.Машина на centos с 4-мя сетевыми интерфейсами (1 смотрит во внутреннюю сеть (enp2s5) и 3 во внешнюю (enp2s0, enp2s1, enp2s2)(PS: все 3 в одной подсети и есть привязка ip-MAC)) 2 5ПК во внутренней сети.

Как можно реализовать доступ из внутренней сети, причем чтоб 2 ПК ходили через интерфейс enp2s0, 1ПК – enp2s1, 2ПК – enp2s2, была подмена ip-адресов.

IPTABLES:

#!/bin/bash

#obyavlenie peremennux

export IPT=«iptables»

export WAN_0=enp2s0

export WAN_1=enp2s1

export WAN_2=enp2s2

export LAN1=enp2s5

export LAN1_IP_0=192.168.251.169

export LAN1_IP_1=192.168.251.173

export LAN1_IP_2=192.168.251.172

export LAN1_IP_3=192.168.251.25

export LAN1_IP_4=192.168.251.26

$IPT -A FORWARD -i $LAN1 -o $WAN_0 -j ACCEPT

$IPT -A FORWARD -i $LAN1 -o $WAN_1 -j ACCEPT

$IPT -A FORWARD -i $LAN1 -o $WAN_2 -j ACCEPT

$IPT -t nat -A POSTROUTING -o $WAN_0 -s $LAN1_IP_0 -j MASQUERADE

$IPT -t nat -A POSTROUTING -o $WAN_0 -s $LAN1_IP_3 -j MASQUERADE

$IPT -t nat -A POSTROUTING -o $WAN_1 -s $LAN1_IP_1 -j MASQUERADE

$IPT -t nat -A POSTROUTING -o $WAN_2 -s $LAN1_IP_2 -j MASQUERADE

$IPT -t nat -A POSTROUTING -o $WAN_2 -s $LAN1_IP_4 -j MASQUERADE

/sbin/iptables-save > /etc/sysconfig/iptables

После данных манипуляций начинает работать 2 ПК по интерфейсу enp2s0 остальные молчат...

Подозреваю, что надо настроить маршрутизацию, пробую сделать таким образом :

#!/bin/bash

#LAN interface

IF0=«enp2s5»

# WAN interface 1

IF1=«enp2s0»

# WAN interface 2

IF2=«enp2s1»

# WAN interface 3

IF3=«enp2s2»

IP1=«192.168.35.169»

IP2=«192.168.35.173»

IP3=«192.168.35.172»

# gateway 1, 2, 3

P=«192.168.35.254»

# LAN netmask

P0_NET=«192.168.251.0/24»

# WAN1 netmask

P1_NET=«192.168.35.169/24»

# WAN2 netmask

P1_NET=«192.168.35.173/24»

# WAN3 netmask

P1_NET=«192.168.35.172/24»

TBL1=«provider1»

TBL2=«provider2»

TBL3=«provider3»

echo «1 provider1» >> /etc/iproute2/rt_tables

echo «2 provider2» >> /etc/iproute2/rt_tables

echo «3 provider3» >> /etc/iproute2/rt_tables

ip route add $P1_NET dev $IF1 src $IP1 table provider1 > /dev/null 2>&1

ip route add default via $P1 tables provider1 > /dev/null 2>&1

ip route add $P2_NET dev $IF2 src $IP2 table provider2 > /dev/null 2>&1

ip route add default via $P2 tables provider2 > /dev/null 2>&1

ip route add $P3_NET dev $IF3 src $IP3 table provider3 > /dev/null 2>&1

ip route add default via $P3 tables provider2 > /dev/null 2>&1

ip route add $P1_NET dev $IF1 src $IP1 > /dev/null 2>&1

ip route add $P2_NET dev $IF2 src $IP2 > /dev/null 2>&1

ip route add $P3_NET dev $IF3 src $IP3 > /dev/null 2>&1

ip route add default via $P1 > /dev/null 2>&1

ip rule add from $IP1 table $TBL1 > /dev/null 2>&1

ip rule add from $IP2 table $TBL2 > /dev/null 2>&1

ip rule add from $IP3 table $TBL3 > /dev/null 2>&1

ip route add $P0_NET dev $IF0 table $TBL1 > /dev/null 2>&1

ip route add $P2_NET dev $IF2 table $TBL1 > /dev/null 2>&1

ip route add $P3_NET dev $IF3 table $TBL1 > /dev/null 2>&1

ip route add 127.0.0.0/8 dev lo table $TBL1 > /dev/null 2>&1

ip route add $P0_NET dev $IF0 table $TBL2 > /dev/null 2>&1

ip route add $P1_NET dev $IF1 table $TBL2 > /dev/null 2>&1

ip route add $P3_NET dev $IF3 table $TBL2 > /dev/null 2>&1

ip route add 127.0.0.0/8 dev lo table $TBL2 > /dev/null 2>&1

ip route add $P0_NET dev $IF0 table $TBL3 > /dev/null 2>&1

ip route add $P2_NET dev $IF2 table $TBL3 > /dev/null 2>&1

ip route add $P1_NET dev $IF1 table $TBL3 > /dev/null 2>&1

ip route add 127.0.0.0/8 dev lo table $TBL3 > /dev/null 2>&1

iptables -t nat -F POSTROUTING

ip route delete default

ip route add default scope global nexthop via $P dev $IF1 weight 1 nexthop via $P dev $IF2 weight 1 nexthop via $P dev $IF3 weight 1

НЕ ПОМОГЛО... (Думал что с интерфейса enp2s5 будет делать запросы к интерфейсам enp2s0,1,2 и iptables будет «фильтровать» согласно своих правил) (Знание linux стремиться к 0)...



Последнее исправление: r0mari0 (всего исправлений: 5)

Ваши скрипты изучать сложно. nexthop вам точно не поможет. То, что вы делаете, в принципе рабочее, хотя это:

ip route add $P1_NET dev $IF1 src $IP1 > /dev/null 2>&1
ip route add $P2_NET dev $IF2 src $IP2 > /dev/null 2>&1
ip route add $P3_NET dev $IF3 src $IP3 > /dev/null 2>&1

явный мусор, раз ip-адреса из одной подсети. Но я не увидел ″ip rule″ для компов из локальной сети. А потом, возможно, ещё нужно будет разбираться с arp-ом, чтобы линукс на запросы от провайдера отвечал через нужный интерфейс...

mky ★★★★★
()
Ответ на: комментарий от mky

Понял, спасибо, буду пробовать. Отпишусь о результате

r0mari0
() автор топика

простыню внимательно не смотрел, но

несколько ip в одной подсети может потребовать дополнительных настроек sysctl на тему arp.

В твоей конфигурации на arp-запрос IP2 или IP3 может отдаваться MAC от IP1 и наоборот.

При 3-х внешних каналах значительно удобнее иметь main без DGW иначе прямые маршруты нужно дублировать во все таблицы.

в правилах маршрутизации сначала смотреть main, потом по адресу источника смотреть таблицы внешних каналов (там должен быть только DGW), а потом должен быть просмотр одной из 3-х таблиц внешнего канала без условий. Что-то типа

0:      from all lookup local 
128:    from all lookup main 
1027:   from xx.xx.xx.x1 lookup 11
1028:   from xx.xx.xx.x2 lookup 12
1070:   from all lookup 13

main без шлюза по-умолчанию, 11 - таблица с DGW первого ISP, 12 - таблица с DGW второго ISP и 13 - таблица с DGW третьего ISP который используется по-умолчанию.

vel ★★★★★
()
Ответ на: комментарий от vel

Результаты:

скрипт iptables остался практически без изменений

#!/bin/bash
#obyavlenie peremennux
export IPT="iptables"
export WAN_0=enp2s0
export WAN_1=enp2s1
export WAN_2=enp2s2
export LAN1=enp2s5

export LAN1_IP_0=192.168.251.169
export LAN1_IP_1=192.168.251.173
export LAN1_IP_2=192.168.251.172
export LAN1_IP_3=192.168.251.25
export LAN1_IP_4=192.168.251.26
export LAN1_IP_NAS1=192.168.251.250
export LAN1_IP_NAS2=192.168.251.251

$IPT -A FORWARD -i $LAN1 -o $WAN_0 -j ACCEPT
$IPT -A FORWARD -i $LAN1 -o $WAN_1 -j ACCEPT
$IPT -A FORWARD -i $LAN1 -o $WAN_2 -j ACCEPT

$IPT -t nat -A POSTROUTING -o $WAN_0 -s $LAN1_IP_0 -j MASQUERADE
$IPT -t nat -A POSTROUTING -o $WAN_0 -s $LAN1_IP_3 -j MASQUERADE

$IPT -t nat -A POSTROUTING -o $WAN_1 -s $LAN1_IP_1 -j MASQUERADE
$IPT -t nat -A POSTROUTING -o $WAN_1 -s $LAN1_IP_NAS1 -j MASQUERADE
$IPT -t nat -A POSTROUTING -o $WAN_1 -s $LAN1_IP_NAS2 -j MASQUERADE

$IPT -t nat -A POSTROUTING -o $WAN_2 -s $LAN1_IP_2 -j MASQUERADE
$IPT -t nat -A POSTROUTING -o $WAN_2 -s $LAN1_IP_4 -j MASQUERADE

/sbin/iptables-save > /etc/sysconfig/iptables
Дальше подправил маршрутизацию
#!/bin/bash
#INTERFACES
#LAN
IFL="enp2s5"
# WAN
IFW1="enp2s0"
IFW2="enp2s1"
IFW3="enp2s2"

#IP
#LAN
IPL1="192.168.251.169"
IPL2="192.168.251.173"
IPL3="192.168.251.172"
IPL4="192.168.251.25"
IPL5="192.168.251.26"
IPLN1="192.168.251.250"
IPLN2="192.168.251.251"
#WAN
IPW1="192.168.35.169"
IPW2="192.168.35.173"
IPW3="192.168.35.172"

# gateway 1, 2, 3
P="192.168.35.254"

#NETMASK
# LAN
PLN="192.168.251.0/24"
# WAN
PWN="192.168.35.0/24"

#TABLES
tbl1="tbl1" #101
tbl2="tbl2" #102
tbl3="tbl3" #103


ip route add $PWN dev $IFW1 src $IPW1 table 101
ip route add default via $P dev $IFW1 table 101
ip route add $PWN dev $IFW2 src $IPW2 table 102
ip route add default via $P dev $IFW2 table 102
ip route add $PWN dev $IFW3 src $IPW3 table 103
ip route add default via $P dev $IFW3 table 103
ip route add default via $P

ip rule add from $IPW1 table 101
ip rule add from $IPL1 table 101
ip rule add from $IPL4 table 101

ip rule add from $IPW2 table 102
ip rule add from $IPL2 table 102
ip rule add from $IPLN1 table 102
ip rule add from $IPLN2 table 102

ip rule add from $IPW3 table 103
ip rule add from $IPL3 table 103
ip rule add from $IPL5 table 103

Отчёт по командам:

ip route

default via 192.168.35.254 dev enp2s2
default via 192.168.35.254 dev enp2s2 proto static metric 100
default via 192.168.35.254 dev enp2s0 proto static metric 102
default via 192.168.35.254 dev enp2s1 proto static metric 103
192.168.35.0/24 dev enp2s2 proto kernel scope link src 192.168.35.172 metric 100
192.168.35.0/24 dev enp2s0 proto kernel scope link src 192.168.35.169 metric 102
192.168.35.0/24 dev enp2s1 proto kernel scope link src 192.168.35.173 metric 103
192.168.251.0/24 dev enp2s5 proto kernel scope link src 192.168.251.254 metric 101

ip rul

0:      from all lookup local
32756:  from 192.168.251.26 lookup tbl3
32757:  from 192.168.251.172 lookup tbl3
32758:  from 192.168.35.172 lookup tbl3

32759:  from 192.168.251.251 lookup tbl2
32760:  from 192.168.251.250 lookup tbl2
32761:  from 192.168.251.173 lookup tbl2
32762:  from 192.168.35.173 lookup tbl2

32763:  from 192.168.251.25 lookup tbl1
32764:  from 192.168.251.169 lookup tbl1
32765:  from 192.168.35.169 lookup tbl1
32766:  from all lookup main
32767:  from all lookup default

iptables -L -v -n (интерфейс enp2s1 пока не задействован)

 pkts bytes target     prot opt in     out     source               destination
 1809  283K ACCEPT     all  --  enp2s5 enp2s0  0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  enp2s5 enp2s1  0.0.0.0/0            0.0.0.0/0
 1584  219K ACCEPT     all  --  enp2s5 enp2s2  0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy ACCEPT 2309 packets, 420K bytes)
 pkts bytes target     prot opt in     out     source               destination

вообщем оно заработало (и как-то работает), все компы работают в интеренет ходят, но проблема с одной машиной, как только её подключаю к сети все тупо замирает сеть валится и пока не отключю от сети все глючит и тормозит... Паника

r0mari0
() автор топика
Ответ на: Результаты: от r0mari0

все, разобрался.)) Все работает. была проблема в MAC адресах (совпадал мак машины с маком линуксового порта) Всем спасибо за помощь

r0mari0
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.