LINUX.ORG.RU
ФорумAdmin

После подключения по pppoe пропадает один из внешних интерфейсов


0

0

Добрый день.
Есть машина, с тремя интерфейсами: два внешних (eth0 и eth2) и один внутренний (eth1).

Интерфейс eth0 смотрит в интернет через ADSL-модем: на модеме поднимается pppoe, сам модем получает внешний ip 87.103.134.45, внутренний ip 192.168.1.1, а интерфейсу назначает ip 192.168.1.4.

Интерфейс eth2 смотрит в интернет посредством поднятия на нём pppoe (он получает внешний ip 94.137.204.194).

Вот что показывает ifconfig:
==============================
-bash-3.00# ifconfig
eth0 Link encap:Ethernet HWaddr 00:1E:0B:DB:DA:4A
inet addr:192.168.1.4 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::21e:bff:fedb:da4a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3212 errors:0 dropped:0 overruns:0 frame:0
TX packets:1302 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:342162 (334.1 KiB) TX bytes:107701 (105.1 KiB)
Interrupt:137

eth1 Link encap:Ethernet HWaddr 00:1E:0B:DB:DA:4B
inet addr:192.168.0.22 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::21e:bff:fedb:da4b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:256278 errors:0 dropped:0 overruns:0 frame:0
TX packets:304202 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:39877449 (38.0 MiB) TX bytes:254102991 (242.3 MiB)
Interrupt:145

eth2 Link encap:Ethernet HWaddr 00:18:71:EB:AF:DC
inet addr:79.122.192.114 Bcast:79.122.192.115 Mask:255.255.255.252
inet6 addr: fe80::218:71ff:feeb:afdc/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:594919 errors:0 dropped:0 overruns:0 frame:0
TX packets:587381 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:358602982 (341.9 MiB) TX bytes:106473853 (101.5 MiB)
Base address:0xcc00 Memory:fdee0000-fdf00000

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:418099 errors:0 dropped:0 overruns:0 frame:0
TX packets:418099 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:67387314 (64.2 MiB) TX bytes:67387314 (64.2 MiB)

ppp0 Link encap:Point-to-Point Protocol
inet addr:94.137.204.194 P-t-P:10.10.0.13 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1
RX packets:30669 errors:0 dropped:0 overruns:0 frame:0
TX packets:33212 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:22066048 (21.0 MiB) TX bytes:3942458 (3.7 MiB)


==============================

Всё дело в том, что как только я запускаю pppoe на интерфейсе eth2 у меня второй IP (87.103.134.45, который висит на eth0) становится невидимым из-вне :-(

Вот настройки маршрутизации:
=========================
-bash-3.00# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.4 * 255.255.255.255 UH 0 0 0 eth0
10.10.0.13 * 255.255.255.255 UH 0 0 0 ppp0
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
192.168.0.0 * 255.255.255.0 U 0 0 0 eth1
169.254.0.0 * 255.255.0.0 U 0 0 0 eth2
default 10.10.0.13 0.0.0.0 UG 0 0 0 ppp0
=========================

Вот настройки iptables:
=======================
# Generated by iptables-save v1.3.5 on Mon Jul 17 00:19:22 2006
*nat
:PREROUTING ACCEPT [3000:299134]
:POSTROUTING ACCEPT [2089:165479]
:OUTPUT ACCEPT [2089:165479]

-A POSTROUTING -s 192.168.0.6 -j SNAT --to-source 94.137.204.194


COMMIT
# Completed on Mon Jul 17 00:19:22 2006
# Generated by iptables-save v1.3.5 on Mon Jul 17 00:19:22 2006
*mangle
:PREROUTING ACCEPT [31849:10761772]
:INPUT ACCEPT [31786:10757939]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [39665:9327957]
:POSTROUTING ACCEPT [39981:9402849]
COMMIT
# Completed on Mon Jul 17 00:19:22 2006
# Generated by iptables-save v1.3.5 on Mon Jul 17 00:19:22 2006
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [39665:9327957]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -i eth1 -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -j ACCEPT

-A RH-Firewall-1-INPUT -i eth2 -j ACCEPT

-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p ipv6-crypt -j ACCEPT
-A RH-Firewall-1-INPUT -p ipv6-auth -j ACCEPT
-A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 143 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 10000 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 137 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 138 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 139 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 445 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 2227 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 2228 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

##########################
-A FORWARD -d 192.168.0.1 -p tcp -m multiport --dport 3389 -j ACCEPT
-A FORWARD -s 192.168.0.1 -j ACCEPT

-A FORWARD -p tcp -m tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
-A FORWARD -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT


COMMIT
=======================

Подскажите, пожалуйста, почему пропадает интерфейс eth0? Как это можно исправить?

Заранее спасибо!


Вся проблема в том что маршрут по-умолчанию меняется и ответные пакеты идут по ppp0, а не по eth0.

Я точно не уверен, но думаю это делается как-то так:

iptables -t mangle -A PREROUTING -i eth0 -m state --state NEW -j CONNMARK --set-mark 0x1
ip route add default via 192.168.1.1 table 128
ip rule add fwmark 0x1 table 128

Может я и ошибаюсь, но надеюсь местные гуру меня поправят.

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

В принципе возможно, но имхо не оптимальное решение. В частности, будут проблемы при включенном rp_filter.
Имхо лучше будет без CONNMARK, только через ip route/ip rule согласно LARTC.

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

Вот помню я что где-то видел про multilink хорошее описание, но забыл где. И ведь точно, в LARTC же.

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