• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

mehrere gleichzeitig ausgehende IPs

spoensche

Moderator
Teammitglied
kruppa schrieb:
scheinbar zu schwer für mich.

Quatsch. Dir fehlen nur ein paar Hintergrundinfos, aber alles halb so wild.

Was ist ein Peer?

Ein Peer besteht aus min. zwei Teilnehmern, die miteinander verbunden sind. In deinem Fall ist veth0 das Hostinterface, das mit dem isolierten vpeer0 gepaart, also direkt verbunden ist.

Beispiel:

Dein Festnetzprovider ist das Hostinterface fürs Haustelefon. Damit du zu Hause mit der Aussenwelt kommunizieren kannst, verwendest du dein Haustelefon (vpeer0). Ohne die Verbindung, mittels vpeer0, zu bzw. über deinen Provider (Hostinterface) ist es dir nicht möglich aus deiner isolierten Umgebung (dein Zuhause, Namespace) mit der Aussenwelt zu kommunizieren.

In deinem Fall ist also eth0:0 dein Wohnzimmer und eth0:1 die Küche oder Büro. Jetzt stehst du da und hast quasi für jede IP ein Netzwerkkabel in der Hand und es kann immer nur eine nach draussen kommunizieren, weil dein Router nur ein freien Slot hat.

Wie umschifft man dieses Problem? Richtig mit einem Switch o. einer Bridge, die alle Geräte miteinander verbinden.

Du machst also jetzt folgendes:

1. Du entfernst die IP von eth0.
2. Du legst eine Bridge br0 an und definierst eth0 als physikalischen Port der Bridge.
3. Der Bridge gibst du die IP, die vorher eth0 hatte, damit dein Rechner ins Internet kann.
4. Die Hostinterfaces veth0 und veth1 fügst du der Bridge als Ports hinzu
5. Die Peer Interfaces vpeer0 weist du dem Namespace ns1 und vpeer1 dem Namespace ns2 zu.
6. Danach vergibst du die jeweilige IP für den jeweiligen Namespace dem entsprechenden vpeer.
7. Forwarding erledigt die Bridge ohne das du Hand anlegen musst.
8. Das Default Gateway ist in der Routing Tabelle schon eingetragen und wenn die Bridge selbst nicht weiss wohin mit einem Paket, schickt sie es ans Default Gateway.

Ich hoffe ich habe es auf eine verständliche und einfache Art erklären können. Wenns irgendwo noch hängt, dann sag bitte wo und ich erkläre es gerne noch mal.
 
OP
K

kruppa

Newbie
Danke, das mit dem Bridge hört sich gut an. Werde mir das noch genauer ansehen, obwohl ich jetzt mit meinem Script auch eine Lösung gefunden habe. Wahrscheinlich sehr umständlich. Die Option -j SNAT --to-source $ip bei iptables hat den Erfolg gebracht.

Code:
for ((i=0; i<${#ips[@]}; i++))
do
        ip=${ips[$i]}
        echo $i = $ip

        ip netns del ns$i
        ip addr add $ip/32 dev eth0

        ip netns add ns$i


        ip link add veth$i type veth peer name vpeer$i
        ip link set vpeer$i netns ns$i
        ip addr add 10.0.$i.1/24 dev veth$i
        ip link set veth$i up

        ip netns exec ns$i ip addr add 10.0.$i.2/24 dev vpeer$i
        ip netns exec ns$i ip link set vpeer$i up
        ip netns exec ns$i ip link set lo up


        ip netns exec ns$i ip route add default via 10.0.$i.1


        #ip netns exec ns$i ifconfig

done

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -P FORWARD DROP
iptables -F FORWARD
iptables -t nat -F

for ((i=0; i<${#ips[@]}; i++))
do
        ip=${ips[$i]}
        echo $i = $ip

        iptables -t nat -A POSTROUTING -s 10.0.$i.0/255.255.255.0 -o eth0 -j SNAT --to-source $ip
        iptables -A FORWARD -i eth0 -o veth$i -j ACCEPT
        iptables -A FORWARD -o eth0 -i veth$i -j ACCEPT

done

Was ist denn hier bei den Firewallregeln eigentlich das Problem? Wird da nicht nur die interne Kommunikation erlaubt?
 

spoensche

Moderator
Teammitglied
kruppa schrieb:
Danke, das mit dem Bridge hört sich gut an. Werde mir das noch genauer ansehen, obwohl ich jetzt mit meinem Script auch eine Lösung gefunden habe. Wahrscheinlich sehr umständlich. Die Option -j SNAT --to-source $ip bei iptables hat den Erfolg gebracht.

Deine Lösung ist für die Verwendung von privaten IP-Addressen, die du eigentlich nicht brauchst, weil du ja extra dafür öffentliche IP' s hast.

kruppa schrieb:
Was ist denn hier bei den Firewallregeln eigentlich das Problem? Wird da nicht nur die interne Kommunikation erlaubt?

Bei den vorherigen hattest du bei den Forwarding Rules keine Interfaces angegeben.
 
Oben