Monday, April 3, 2017

How to run Firefox in a separate network name space

In this post I'll explain how to run Firefox (or any ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r application) in a separate network name space. If you wonder why would you do that, here are some reasons:
  1. You connect to a VPN and want a single application to connect via VPN. All cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r applications should access network as usual.
  2. You want to know what network resources specific application does access. For example, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is a JavaScript application that runs within cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Web browser and you want to monitor it on a network level.
  3. You want to temporarily use anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r IP address, but in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same time keep cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 existing network configuration because some applications use it and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y wouldn't react well on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 change.
  4. You have alternative connection to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Internet (e.g. one via wired interface, and anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r via LTE) and you want some applications to use LTE, default being wired interface. This is actually variation of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cases 1 and 3, but obviously it's not cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same.
Probably cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r reasons, too, but I think this is enough to persuade you into advantages of using network namespaces on Linux. And note that you can run two instances of Firefox in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same time. One "normal" in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 "normal" network namespace, and anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r one in new and potentially restricted network namespace. More on that later in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 post.

So, here is how to create new network name space with network interface(s). Note that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are several different cases, depending on how you connect to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Internet and what you want to achieve. So, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re will be several subcases. But first, create a new network name space using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following command (as a root user):
# ip netns add
NSNAME will be cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 name of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 network name space. You should use something short and meaningful, i.e. something that will associate you to what cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 network namespace is used for. You can check that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is a network name space using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following command:
# ip netns list
From this point on we have two subcases:
  • You are connected using wired Ecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rnet interface and you can attach new machines to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Ecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rnet network.
  • You are connected to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Internet using wireless Ecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rnet interface or you are connected to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 wired Ecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rnet interface and are not allowed to connect new machines.
All those cases are described in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following subsections.

Wired Ecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rnet interface

This is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 easiest case, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are several options you can use. We'll use macvlan type of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 interface that will create a clone of an existing wired Ecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rnet interface which will appear on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 physical network with its own parameters. This is, in effect, like attaching a new host on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 local network. Note that if you are not allowed to connect devices to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 network, you should use routing method described for wireless interface.

First step is to create new interface:
# ip link add link name type macvlan
The parameters are: ETHIF is your existing Ecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rnet interface, while IFNAME is a new interface that will be created. You should cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n move cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 interface into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 target network namespace (we assume here that you want to move it to NSNAME):
# ip link set netns
and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n you have to activate it:
# ip netns exec ip link set up
note that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 activation has to be done using "ip netns exec" since to access network interface you have to swich to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 network namespace where cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 interface is! What is left is to assign it an IP address. This can be done statically or via DHCP.

Now that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 network part is ready, skip to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 section Starting Firefox.

Wireless LAN

In case you are connected to a wireless LAN, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n macvlan link type will not work, so anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r mechanism is necessary. There are two options, bridging and routing. The problem with bridging is that you have to turn off wireless interface before enslaving it into a bridge. That creates two problems. The first one is that all current TCP connections will break, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 second is that it doesn't play nicely with NetworkManager and similar software. Thus, I'll describe routing case.

First, create pair of virtual Ecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rnet interfaces like this:
ip link add type veth
This will create two new interfaces veth0 and veth1. Those interfaces are actually two ends of a single link. We'll move one interface into anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r network namespace:
ip link set veth1 netns
Next we'll configure interfaces with IP addresses. I'll use 10.255.255.1/24 for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 interface that's left in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 main network namespace (veth0) and 10.255.255.2/24 for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 interface in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 NSNAME network name space (veth1):
# ip addr add 10.255.255.1/24 dev veth0
# ip link set dev veth0 up
# ip netns exec ip addr add 10.255.255.2/24 dev veth1
# ip netns exec ip link set dev veth1 up
# ip netns exex ip ro add default via 10.255.255.1
we also need to configure NAT because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 network 10.255.255.0/24 is only used for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 communication of two network namespaces and it should not go outside cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 host computer:
# iptables -A POSTROUTING -t nat -o wlp3s0 -s 10.255.255.2 -j MASQUERADE
you should change wlp3s0 with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 name of your wireless interface. You should take note of two things in case it doesn't work:
  1. Forwarding has to be enabled. This is achieved/checked via sysctl /proc/sys/net/ipv4/ip_forward (it should contain 1).
  2. Maybe your host has firewall that blocks traffic. To check if that's cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 problem, temporarily disable firewall and try again. Note that disabling a firewall will most likely remove iptables rule you added so you'll have to add it again.

Starting Firefox

Now, when you handled creating cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 interface within cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 new network name space, to start Firefox (or any ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r application) in it, first you should switch into new network name space. Do this in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following way:
# ip netns exec bash
Note that it is important to do it that way in order to preserve environmental variables, i.e. if you do "su -" or something else, you'll reset environment and you won't be able to start graphical applications. After you got bash shell as a root, switch again to a "normal" user:
su
again, it is very important to preserve network namespace, so you have to use command su as shown. Obviously, substitute userid with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user ID logged into graphical interface. Next, you should start Firefox:
$ firefox &
In case you already have running instance of Firefox that, for whatever reason, you don't wont to stop cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n you can start a new instance like this:
$ firefox -P -no-remote&
This will start new instance even though cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is a running Firefox proces (-no-remote) and present you with a dialog box to choose a profile to run to. You can not use existing profile so it means that you have to create a new one specially for this purpose. The drawback is that your bookmarks, cookies and ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r thing won't be visible in a new instance. 

5 comments:

Unknown said...

Hi,
Great reading. I was very positive surprised to see your name Stjepan.
It reminded me of great times at FER when I did a Linux seminar in your group. :)

Best wishes!

Joni said...

Hello was wondering why dns leaks on ubuntu 17.04 // cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hardcoded namespace name-servers are ignored and only cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 host one is used.

very strange

callmejoe said...

this is great. i'm running a VPN client on my desktop and generally want all internet traffic going through it. some websites refuse to work though and i dont like turning off cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 vpn for this. i just start a new browser in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 separate namespace now. thanks!

one thing. does this mean any command running now is run with root privileges? and if so, any security issues with that?

Stjepan Groš (sgros) said...

@callmejoe

As I wrote in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 post, before running firefox (or any ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r user process after setting up name space) you should switch to some normal user. Running everything as a root user, especially such a complex piece of software as Firefox, is a huge security risk! So, don't do that!

callmejoe said...

oh i definitely am switching using su. i thought maybe since bash was started as root cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n maybe cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 root privileges carried to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user.

thanks for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reply on an old post

About Me

scientist, consultant, security specialist, networking guy, system administrator, philosopher ;)

Blog Archive