nipe icon indicating copy to clipboard operation
nipe copied to clipboard

[Question] The use in containers

Open gerardo-junior opened this issue 7 years ago • 15 comments

I'm running some tests, to eventually create a packaging continuous integration for my distro and would like to take a concept test in isolated environments . Do any of you have an "official" docker image with the nipe working properly?

ps. if you feel like answering in Portuguese!

gerardo-junior avatar Feb 28 '18 22:02 gerardo-junior

@GouveaHeitor would you like nipe containerized? If so, I can get the Dockerfile written.

This could be a cool idea. In theory, the container image can be used to help employ the use of Tor for other containerized applications. Thoughts?

naltun avatar Oct 25 '19 13:10 naltun

Hi @naltun,

Yes, we would like to see Nipe running in a docker container! I tried to write Dockerfile a few times but I always got some problems/bugs!

If you write Dockerfile, it will be of great help!

Thx!

htrgouvea avatar Oct 25 '19 13:10 htrgouvea

@GouveaHeitor Alright, I'll try writing a Dockerfile. I'm new to Docker, but I've written a handful of Dockerfiles.

Mind telling me what issues/complications you found when trying?

naltun avatar Oct 25 '19 14:10 naltun

The problems were related to iptables... I confess that I did not strive to look for the real reasons for this.

htrgouvea avatar Oct 25 '19 14:10 htrgouvea

@GouveaHeitor that is really helpful info. Thanks!

naltun avatar Oct 25 '19 14:10 naltun

A couple things I've already found:

  1. perl nipe.pl install isn't installing the config files. I'll look into this...
  2. iptables isn't installed by default on the perl images I'm using. I've already fixed this by installing it via the Dockerfile.

About point 1, check this out (me inside of the container): image

The exit status of perl nipe.pl install is also 0.

About point 2, I believe that all/most perl official container runtimes are using Debian as the system. Currently I am using perl:5.28-stretch, although I tried perl:5.28-slim-stretch (to reduce the image size). I encountered an error here w/ CPAN modules... So for the time being I am going to move forward to the regular stretch image. 👍

Edit for Appending notes:

  • I do not think system() subroutine calls are working across the scripts

naltun avatar Oct 25 '19 15:10 naltun

Currently running into this gem:

iptables v1.6.0: can't initialize iptables table `filter': Permission denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.

Edit: Even running sudo perl nipe.pl start throws this error. Also, I noticed that even though I receive this iptables issue, nipe.pl still exits with a status of 0. This may want to be changed?

naltun avatar Oct 25 '19 17:10 naltun

I'm working off of this branch, by the way.

So I've gotten everything set up. I can start/stop the service, but perl nipe.pl status, even when the service is started, gives this: [!] ERROR: sorry, it was not possible to establish a connection to the server.

naltun avatar Oct 25 '19 19:10 naltun

@GouveaHeitor @naltun ok, I just got the same error while playing around with nipe in my machine (not container). Not even a direct request to https://check.torproject.org/api/ip with curl worked.

What I figured out after some debugging was that I had a conflicting iptables rule with TCP/UDP output packets that Nipe set vs another component had set previously (libvirt to be more precise, related to virtualization).

The solution I found was to basically flush the whole iptable rules I had:

 --flush   -F [chain]          Delete all rules in  chain or all chains

Hence:

$ ./nipe.pl start
...
$ ./nipe.pl status
[!] ERROR: sorry, it was not possible to establish a connection to the server.
$ curl https://check.torproject.org/api/ip                                                                                     
curl: (6) Could not resolve host: check.torproject.org
$ ./nipe.pl stop
# iptables-save > iptable-rules.save
# iptables -F
$ ./nipe.pl start
...
$ curl https://check.torproject.org/api/ip
{"IsTor":true,"IP":"46.165.245.154"}
$ ./nipe.pl status
[+] Status: activated. 
[+] Ip: 87.118.116.103

We could force a flush on iptables rules before nipe set its own rules, but I don't know how other apps rules would interact and, possibly, conflict with nipe's.

FWIW, Issue #49 was closed and was related to this specific issue. I'm going to open a new issue to further investigate it.

bmeneg avatar Jan 24 '20 20:01 bmeneg

I started to develop an image for Nipe using the Dockerfile, it is available in the "develop" branch, however it is not ready yet.

I believe that because it is an isolated and restricted container, we will not face problems such as conflict of rules of other applications, only if it is something of the docker image itself.

htrgouvea avatar Jan 27 '20 18:01 htrgouvea

@GouveaHeitor the idea is to keep both nipe and tor running on the same container? If so, yep, it may work without any problems.

I have another idea that we'll need to discus further in the near future, involving a more robust approach with VMs instead of containers (which could be included, of course :P).

bmeneg avatar Jan 29 '20 18:01 bmeneg

Yes, the idea is to have everything operating in the same container ... I think people want Nipe in this format to be able to use it as a kind of proxy in their networks ... I'm trying to work on that because many people want to use it the nipe that way.

htrgouvea avatar Jan 30 '20 16:01 htrgouvea

Hi there, Thanks à lot for this amazing tool. I had the same idea. I forked the repo to "dockerize" nipe. I worked on it à but today and managed to get à proper image, without errors. However, the container doesn't start, or at least, do not last. For it to work, I have to exec bash and manualy issue the commands. If you'd like to take à look, it's over there : Repo

MrNonoss avatar Mar 23 '20 18:03 MrNonoss

It's still not 100% but the best image I've managed to get so far is:

FROM perl:latest

EXPOSE 9050 9061

WORKDIR /nipe
COPY . /nipe

RUN cpan install IO::Socket::SSL Try::Tiny Config::Simple JSON
RUN apt update && \
    apt upgrade && 
RUN perl nipe.pl install

CMD ["perl" "nipe.pl" "start"]
CMD ["perl", "nipe.pl" "status"]

# docker run -d --cap-add=NET_ADMIN --net=host nipe

htrgouvea avatar Jun 12 '20 02:06 htrgouvea

Thx @MrNonoss

htrgouvea avatar Jun 12 '20 02:06 htrgouvea