Dyo IP addr se ena ethernet interface
Christos Ricudis
ricudis at itc.auth.gr
Wed Dec 2 20:43:17 EET 2009
Thanasis wrote:
> on 12/02/2009 06:31 PM Antonis Christofides wrote the following:
>
>> Καλησπέρα. Έχω ένα Debian σέρβερ, με ένα σωρό services, και μία κάρτα
>> δικτύου eth1 (3c905B). (Έχει και μια eth0 που δεν χρησιμοποιείται).
>> Για κάποιο λόγο που δεν θέλω τώρα να εξηγήσω γιατί είναι εκτός
>> θέματος, χρειάζεται να του βάλω και δεύτερη IP address.
>>
>> auto eth1
>> iface eth1 inet static
>> address ...
>> ...
>>
>> auto eth1:1
>> iface eth1:1 inet static
>> address ...
>> ...
>>
>> Αυτό δούλεψε μεν, αλλά έχει το πρόβλημα πως (ενίοτε ή πάντα, δεν είμαι
>> σίγουρος) όταν στέλνει email στον smarthost τα στέλνει από το eth1:1,
>> ενώ εγώ θέλω πάντα να τα στέλνει από το eth1. Μπορώ μεν στο exim να
>> βάλω κάπου την παράμετρο interfaces στο smtp transport, που θα λύσει
>> αυτό το πρόβλημα, έτσι όμως θα λύσω ένα επιμέρους σύμπτωμα. Αυτό που
>> θα ήθελα είναι ΠΑΝΤΑ να χρησιμοποιείται η eth1, για όλες τις
>> εξερχόμενες συνδέσεις.
>>
> Δηλαδή το eth1:1 θα το χρησιμοποιεί μόνο όταν έχεις εισερχόμενες, και
> ενδεχομένως για εξερχόμενες που αποτελούν απάντηση σε εισερχόμενες;
>
>
Kaylh erwthsh. H apanthsh einai oti sto unix to multi-homing roufaei,
kai de ftaiei gi ayto toso to unix, oso o tropos pou xrhsimopoioun ta
BSD sockets oi application developers.
Sexhgoumai :
Sthn periptwsh twn servers, h synh8hs diadikasia pou akolou8eitai einai
h ekshs :
struct sockaddr_in stSockAddr;
int SocketFD = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
stSockAddr.sin_family = AF_INET;
stSockAddr.sin_port = htons(1100);
stSockAddr.sin_addr.s_addr = INADDR_ANY;
bind(SocketFD,(const struct sockaddr *)&stSockAddr, sizeof(struct
sockaddr_in)));
listen(SocketFD, 10);
loop me accept() ktl ktl
To INADDR_ANY sto sin_addr.s_addr leei sto kernel socket code, oti to
sygkekrimeno socket proorizetai gia na apodextei connections poy
katalhgoun se *opoiodhpote* apo ta IPs pou einai configured se kapoio
interface tou systhmatos. To socket code gnwrizei arketa gia na gemisei
ta ypoloipa pedia tou socket structure pou epistrefei h accept() apo
mono tou me ton swsto tropo.
Se periptwsh twra poy enas server 8eloume na akouei mono se ena
sygkekrimeno IP, "apla" to bazoume sto sin_addr.s_addr tou listening
socket. To socket programming einai etsi ki alliws arketa anwmalo, wste
o perissoteros kosmos otan katalabainei oti ayth h epilogh prepei na
synodeyetai kai me configurable user options ktl ktl, leei "de gamietai"
kai xrhsimopoiei apla to INADDR_ANY. Sto server-side ayto den einai kai
toso megalo problhma, mia poy yparxoun arketoi enallaktikoi tropoi na
perioriseis to traffic pou den 8eleis.
Sthn periptwsh twn clients twra, synh8ws o kosmos kanei kati san ayto :
struct sockaddr_in stSockAddr;
int SocketFD = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
stSockAddr.sin_family = AF_INET;
stSockAddr.sin_port = htons(1100);
Res = inet_pton(AF_INET, "192.168.1.3", &stSockAddr.sin_addr);
connect(SocketFD, (const struct sockaddr *)&stSockAddr,
sizeof(struct sockaddr_in));
Prosekste oti leipei h bind(). H bind() ayto poy kanei sthn ousia einai
na orizei to *local* endpoint tou socket. Synh8ws sto client-side kaneis
den th xrhsimopoiei, pragma poy einai to antistoixo toy na les ston
kernel "kane oti goustareis". H *swsth* diadikasia einai na kaneis
bind() to socket prin thn connect, me akoma ena user-configurable option
pou na epitrepei sto xrhsth na epileksei to IP poy 8a xrhsimopoih8ei gia
ta outgoing connections ktl ktl ktl.
Sthn praksh twra einai poly pio eykolo na xrhsimopoihseis kati etoimo.
Proteinw ayto edw :
https://code.grnet.gr/projects/iffool
More information about the Linux-greek-users
mailing list