Programme in eigenen Networknamespaces betreiben

| by

Ich habe zu Hause einen modernen DSL-Anschluss, der sich durch Carrier-grade NAT (CGN) und dynamisches IPv6 auszeichnet. Ein guter Grund, mit einem Tunnel wenigstens das IPv6 statisch (=brauchbar) zu machen.

Dummerweise stört sich Netflix an diesem IPv6-Tunnel, weil böses VPN. Also im Chrome IPv6 abschalten, was nicht mehr geht. Natürlich könnte ich IPv6 global unter /proc/sys/net/ipv6/conf/all/disable_ipv6 abschalten. Das würde dann andere Anwendungen betreffen, die IPv6 benötigen.

Mein Ansatz: Ich erzeuge einen Networknamespace, der kein IPv6 hat und starte in diesem dann den Chrome.

Networknamespace erzeugen:

ip netns add v4only

Interfacepaar erzeugen:

ip link add veth0 type veth peer name veth1

Ein Interface dem Networknamespace zuweisen:

ip link set veth1 netns v4only

Addressen und Routen festlegen:

ip a add 10.0.0.1/31 dev veth0
ip link set veth0 up
ip netns exec v4only ip a add 10.0.0.0/31 dev veth1
ip netns exec v4only ip link set veth1 up
ip netns exec v4only ip r add default via 10.0.0.1

Routing und NAT aktivieren:

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Chrome im neuen Networknamespace starten:

ip netns exec v4only su -c "google-chrome-stable" georg