Skip to content

Instantly share code, notes, and snippets.

@sanderfoobar
Last active September 23, 2024 18:42

Revisions

  1. sanderfoobar revised this gist Jun 24, 2020. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -21,7 +21,7 @@ I2P-Zero comes with A GUI but we will not be using that, since you are most like
    In short, I2P-Zero allows us to:

    1. Host an 'eepsite' (I2P website)
    2. Host any service on the I2P network (for example; forward a local DNS server at `127.0.0.1:53` to be available via I2P.
    2. Host any service on the I2P network (for example; forward a local web server at `127.0.0.1:80` to be available via I2P.
    3. Create a local SOCKS proxy, which you can use to tunnel traffic through.

    Our goal is to host a fully operational node over I2P, so we'll need to configure both incoming and outbound traffic over I2P:
  2. sanderfoobar revised this gist Aug 30, 2019. 1 changed file with 5 additions and 5 deletions.
    10 changes: 5 additions & 5 deletions monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -81,7 +81,7 @@ To allow our node to relay incoming transactions over I2P, we need to make **out

    Execute the following to create a SOCKS tunnel:

    - `./tunnel-control.sh socks.create 127.0.0.1 48085`
    - `./tunnel-control.sh socks.create 48085`

    I2P-Zero will acknowledge the creation of this tunnel with a simple `OK`.

    @@ -93,12 +93,12 @@ To monitor the tunnel:

    Time to launch `monerod`. The flag we should include is `--anonymous-inbound` ([documentation](https://github.com/monero-project/monero/blob/master/ANONYMITY_NETWORKS.md#inbound-connections)) so that `monerod` knows what our 'public' I2P server address & port is.

    The format is `--anonymous-inbound <address>:<N>,127.0.0.1:<M>` where `N` is your i2p server tunnel port, `M` is a free local port and address is your `b32.i2p` address. `M` and `N` can be the same port.
    The format is `--anonymous-inbound <address>,127.0.0.1:<M>` where `M` is a free local port and address is your `b32.i2p` address.

    We previously assigned port `48083` to our I2P server. Our flag becomes:

    ```
    --anonymous-inbound "suspiciouslyrandomandverylongstring.b32.i2p:48083,127.0.0.1:48083"
    --anonymous-inbound "suspiciouslyrandomandverylongstring.b32.i2p,127.0.0.1:48083"
    ```

    Another flag you should include is `--proxy` ([documentation](https://github.com/monero-project/monero/blob/master/ANONYMITY_NETWORKS.md#outbound-connections)). Failure to include this flag will result in your node not being able to relay transactions into the I2P network. You should always include this flag.
    @@ -126,7 +126,7 @@ After=network.target
    [Service]
    Type=forking
    PIDFile=/home/monero/monerod.pid
    ExecStart=/home/monero/monero-x86_64-linux-gnu.0.14.1.0/monerod --anonymous-inbound "suspiciouslyrandomandverylongstring.b32.i2p:48083,127.0.0.1:48083" --restricted-rpc --detach --pidfile /home/monero/monerod.pid
    ExecStart=/home/monero/monero-x86_64-linux-gnu.0.14.1.0/monerod --anonymous-inbound "suspiciouslyrandomandverylongstring.b32.i2p,127.0.0.1:48083" --restricted-rpc --detach --pidfile /home/monero/monerod.pid
    User=monero
    Group=monero
    @@ -149,7 +149,7 @@ For comprehensibility, I will include the full `monerod` command that I personal
    --rpc-bind-port 18089 \
    --restricted-rpc \
    --public-node \
    --anonymous-inbound "suspiciouslyrandomandverylongstring.b32.i2p:48083,127.0.0.1:48083" \
    --anonymous-inbound "suspiciouslyrandomandverylongstring.b32.i2p,127.0.0.1:48083" \
    --proxy i2p,127.0.0.1:48085 \
    --add-peer "dsc7fyzzultm7y6pmx2avu6tze3usc7d27nkbzs5qwuujplxcmzq.b32.i2p" \
    --confirm-external-bind
  3. sanderfoobar revised this gist Aug 30, 2019. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -110,7 +110,7 @@ Another flag you should include is `--proxy` ([documentation](https://github.com
    The last flag you should include is `--add-peer` which specifies an existing I2P seed node (also called `mipseed`) to connect to. Without this command, you will not be able to relay transactions as you're not connected to any nodes.

    ```
    --add-peer "dsc7fyzzultm7y6pmx2avu6tze3usc7d27nkbzs5qwuujplxcmzq.b32.i2p:28083"
    --add-peer "dsc7fyzzultm7y6pmx2avu6tze3usc7d27nkbzs5qwuujplxcmzq.b32.i2p"
    ```


    @@ -151,7 +151,7 @@ For comprehensibility, I will include the full `monerod` command that I personal
    --public-node \
    --anonymous-inbound "suspiciouslyrandomandverylongstring.b32.i2p:48083,127.0.0.1:48083" \
    --proxy i2p,127.0.0.1:48085 \
    --add-peer "dsc7fyzzultm7y6pmx2avu6tze3usc7d27nkbzs5qwuujplxcmzq.b32.i2p:28083" \
    --add-peer "dsc7fyzzultm7y6pmx2avu6tze3usc7d27nkbzs5qwuujplxcmzq.b32.i2p" \
    --confirm-external-bind
    ```

  4. sanderfoobar revised this gist Aug 30, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -8,7 +8,7 @@ You *should* be able to get through this document and host an I2P node in ~20 mi

    - Linux system, **can** be behind a firewall (i.e: home network)
    - Latest monero (CLI) release: [link](https://downloads.getmonero.org/cli/linux64)
    - Latest I2P-Zero (v1.11 at time of writing): [link](https://github.com/i2p-zero/i2p-zero/releases)
    - Latest I2P-Zero (v1.12 at time of writing): [link](https://github.com/i2p-zero/i2p-zero/releases)

    ## I2P-Zero

  5. sanderfoobar revised this gist Aug 30, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -138,7 +138,7 @@ Change as you see fit.

    ## Conclusion

    To wrap up, the above 3 flags (`--anonymous-inbound`, `--proxy`, `--add-peer`) are needed to point `monerod` to your configured I2P-Zero instance. The
    To wrap up, the above 3 flags (`--anonymous-inbound`, `--proxy`, `--add-peer`) are needed to get an I2P-Zero powered Monero node hosted.

    For comprehensibility, I will include the full `monerod` command that I personally use on my public RPC Monero node that's on a server:

  6. sanderfoobar revised this gist Aug 30, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -93,7 +93,7 @@ To monitor the tunnel:

    Time to launch `monerod`. The flag we should include is `--anonymous-inbound` ([documentation](https://github.com/monero-project/monero/blob/master/ANONYMITY_NETWORKS.md#inbound-connections)) so that `monerod` knows what our 'public' I2P server address & port is.

    The format is `--anonymous-inbound <address>:<N>,127.0.0.1:<M>` where `N` is your i2p server tunnel port, `M is a free local port and address is your b32.i2p address. `M` and `N` can be the same port.
    The format is `--anonymous-inbound <address>:<N>,127.0.0.1:<M>` where `N` is your i2p server tunnel port, `M` is a free local port and address is your `b32.i2p` address. `M` and `N` can be the same port.

    We previously assigned port `48083` to our I2P server. Our flag becomes:

  7. sanderfoobar revised this gist Aug 30, 2019. 1 changed file with 5 additions and 5 deletions.
    10 changes: 5 additions & 5 deletions monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -93,26 +93,26 @@ To monitor the tunnel:

    Time to launch `monerod`. The flag we should include is `--anonymous-inbound` ([documentation](https://github.com/monero-project/monero/blob/master/ANONYMITY_NETWORKS.md#inbound-connections)) so that `monerod` knows what our 'public' I2P server address & port is.

    We previously assigned port `48083` to our I2P server/service. Thus, our flag becomes:
    The format is `--anonymous-inbound <address>:<N>,127.0.0.1:<M>` where `N` is your i2p server tunnel port, `M is a free local port and address is your b32.i2p address. `M` and `N` can be the same port.

    We previously assigned port `48083` to our I2P server. Our flag becomes:

    ```
    --anonymous-inbound "suspiciouslyrandomandverylongstring.b32.i2p:48083,127.0.0.1:48083"
    ```

    Another flag you should include is `--proxy` ([documentation](https://github.com/monero-project/monero/blob/master/ANONYMITY_NETWORKS.md#outbound-connections)). Failure to include this flag will result in your node not being able to relay transactions into the I2P network. You should always include this flag.

    ```
    --proxy i2p,127.0.0.1:48085
    ```

    The last flag you should include is an existing I2P seed node (also called `mipseed`) to connect to.
    The last flag you should include is `--add-peer` which specifies an existing I2P seed node (also called `mipseed`) to connect to. Without this command, you will not be able to relay transactions as you're not connected to any nodes.

    ```
    --add-peer "dsc7fyzzultm7y6pmx2avu6tze3usc7d27nkbzs5qwuujplxcmzq.b32.i2p:28083"
    ```

    Without this command, you will not be able to relay incoming transactions as you're not connected to any other nodes.


    #### Monero Daemon systemd

  8. sanderfoobar revised this gist Aug 29, 2019. 1 changed file with 5 additions and 5 deletions.
    10 changes: 5 additions & 5 deletions monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -10,7 +10,7 @@ You *should* be able to get through this document and host an I2P node in ~20 mi
    - Latest monero (CLI) release: [link](https://downloads.getmonero.org/cli/linux64)
    - Latest I2P-Zero (v1.11 at time of writing): [link](https://github.com/i2p-zero/i2p-zero/releases)

    ### I2P-Zero
    ## I2P-Zero

    I2P-Zero (also refered to as `i2pz`) is a small footprint I2P router. It has a slimmed down Java runtime embedded and as such has zero dependencies.

    @@ -62,7 +62,7 @@ Change paths as you wish, reload systemd: `systemctl daemon-reload`, then you ca

    verify it is running: `netstat -tulpn | grep '8051'`.

    #### Configuring I2P-Zero - creating a server
    ## Configuring I2P-Zero - creating a server

    First thing we need to do is register an I2P service/server:

    @@ -75,7 +75,7 @@ The output will give you an I2P `b32` address, for example:
    This will be the address of your I2P server/service and will be used for **incoming** connections.


    #### Configuring I2P-Zero - creating a SOCKS tunnel
    ## Configuring I2P-Zero - creating a SOCKS tunnel

    To allow our node to relay incoming transactions over I2P, we need to make **outbound** connections over I2P. To send traffic *into* I2P, we'll need to create a SOCKS tunnel. I2P-Zero can do this for us.

    @@ -89,7 +89,7 @@ To monitor the tunnel:

    `./tunnel-control.sh all.list | python -m json.tool`

    #### Launching monerod
    ## Launching monerod

    Time to launch `monerod`. The flag we should include is `--anonymous-inbound` ([documentation](https://github.com/monero-project/monero/blob/master/ANONYMITY_NETWORKS.md#inbound-connections)) so that `monerod` knows what our 'public' I2P server address & port is.

    @@ -136,7 +136,7 @@ WantedBy=multi-user.target

    Change as you see fit.

    #### Conclusion
    ## Conclusion

    To wrap up, the above 3 flags (`--anonymous-inbound`, `--proxy`, `--add-peer`) are needed to point `monerod` to your configured I2P-Zero instance. The

  9. sanderfoobar revised this gist Aug 29, 2019. 1 changed file with 21 additions and 4 deletions.
    25 changes: 21 additions & 4 deletions monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -39,7 +39,10 @@ Our goal is to host a fully operational node over I2P, so we'll need to configur

    verify it is running: `netstat -tulpn | grep '8051'` (we are grepping for the control port).

    In addition, a `systemd` startup script is available for `/etc/systemd/system/i2pzero.service`:

    #### I2P-Zero systemd

    A `systemd` startup script is available for `/etc/systemd/system/i2pzero.service`:

    ```
    [Unit]
    @@ -57,7 +60,7 @@ WantedBy=multi-user.target

    Change paths as you wish, reload systemd: `systemctl daemon-reload`, then you can do `service i2pzero start`.

    Again, verify it is running: `netstat -tulpn | grep '8051'`.
    verify it is running: `netstat -tulpn | grep '8051'`.

    #### Configuring I2P-Zero - creating a server

    @@ -102,7 +105,18 @@ Another flag you should include is `--proxy` ([documentation](https://github.com
    --proxy i2p,127.0.0.1:48085
    ```

    In addition, a `systemd` startup script is available for `/etc/systemd/system/monerod.service`:
    The last flag you should include is an existing I2P seed node (also called `mipseed`) to connect to.

    ```
    --add-peer "dsc7fyzzultm7y6pmx2avu6tze3usc7d27nkbzs5qwuujplxcmzq.b32.i2p:28083"
    ```

    Without this command, you will not be able to relay incoming transactions as you're not connected to any other nodes.


    #### Monero Daemon systemd

    A `systemd` startup script is available for `/etc/systemd/system/monerod.service`:

    ```
    [Unit]
    @@ -124,7 +138,9 @@ Change as you see fit.

    #### Conclusion

    To wrap up, the above 2 flags (`--anonymous-inbound` and `--proxy`) are needed to point `monerod` to your configured I2P-Zero instance. For comprehensibility, I will include the full `monerod` command that I personally use on my public RPC Monero node that's on a server:
    To wrap up, the above 3 flags (`--anonymous-inbound`, `--proxy`, `--add-peer`) are needed to point `monerod` to your configured I2P-Zero instance. The

    For comprehensibility, I will include the full `monerod` command that I personally use on my public RPC Monero node that's on a server:

    ```
    ./monerod
    @@ -135,6 +151,7 @@ To wrap up, the above 2 flags (`--anonymous-inbound` and `--proxy`) are needed t
    --public-node \
    --anonymous-inbound "suspiciouslyrandomandverylongstring.b32.i2p:48083,127.0.0.1:48083" \
    --proxy i2p,127.0.0.1:48085 \
    --add-peer "dsc7fyzzultm7y6pmx2avu6tze3usc7d27nkbzs5qwuujplxcmzq.b32.i2p:28083" \
    --confirm-external-bind
    ```

  10. sanderfoobar revised this gist Aug 29, 2019. 1 changed file with 23 additions and 5 deletions.
    28 changes: 23 additions & 5 deletions monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -2,7 +2,7 @@

    This document serves as a small tutorial for new and/or existing Monero node operators who wish to support I2P users by allowing their nodes to communicate p2p through I2P.

    You *should* be able to get through this document and host an I2P node in ~15 minutes.
    You *should* be able to get through this document and host an I2P node in ~20 minutes.

    #### Requirements:

    @@ -12,7 +12,7 @@ You *should* be able to get through this document and host an I2P node in ~15 mi

    ### I2P-Zero

    I2P-Zero (also refered to as `i2pz`) is a small footprint I2P router.
    I2P-Zero (also refered to as `i2pz`) is a small footprint I2P router. It has a slimmed down Java runtime embedded and as such has zero dependencies.

    This program has a control port on `8051` which you can use to create I2P service(s), which is a simple plaintext protocol. To interact with it, use `tunnel-control.sh` or, alternatively simply use netcat: `echo -e "version" | nc 127.0.0.1 8051`.

    @@ -39,7 +39,7 @@ Our goal is to host a fully operational node over I2P, so we'll need to configur

    verify it is running: `netstat -tulpn | grep '8051'` (we are grepping for the control port).

    Oh, if you were wondering, a `systemd` startup script is also available: `/etc/systemd/system/i2pzero.service`
    In addition, a `systemd` startup script is available for `/etc/systemd/system/i2pzero.service`:

    ```
    [Unit]
    @@ -102,11 +102,29 @@ Another flag you should include is `--proxy` ([documentation](https://github.com
    --proxy i2p,127.0.0.1:48085
    ```

    That's it.
    In addition, a `systemd` startup script is available for `/etc/systemd/system/monerod.service`:

    ```
    [Unit]
    Description=monerod
    After=network.target
    [Service]
    Type=forking
    PIDFile=/home/monero/monerod.pid
    ExecStart=/home/monero/monero-x86_64-linux-gnu.0.14.1.0/monerod --anonymous-inbound "suspiciouslyrandomandverylongstring.b32.i2p:48083,127.0.0.1:48083" --restricted-rpc --detach --pidfile /home/monero/monerod.pid
    User=monero
    Group=monero
    [Install]
    WantedBy=multi-user.target
    ```

    Change as you see fit.

    #### Conclusion

    The above 2 flags is all that is needed to point `monerod` to your configured I2P-Zero instance. For comprehensibility, I will include the full `monerod` command that I personally use on my public RPC Monero node:
    To wrap up, the above 2 flags (`--anonymous-inbound` and `--proxy`) are needed to point `monerod` to your configured I2P-Zero instance. For comprehensibility, I will include the full `monerod` command that I personally use on my public RPC Monero node that's on a server:

    ```
    ./monerod
  11. sanderfoobar revised this gist Aug 28, 2019. 1 changed file with 4 additions and 3 deletions.
    7 changes: 4 additions & 3 deletions monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -12,9 +12,9 @@ You *should* be able to get through this document and host an I2P node in ~15 mi

    ### I2P-Zero

    I2P-Zero (also refered to as `i2pz`) is a small footprint I2P router. It has a control port on `8051` which you can use to create I2P service(s).
    I2P-Zero (also refered to as `i2pz`) is a small footprint I2P router.

    The control port is a simple plaintext protocol, we can interact with it via `tunnel-control.sh` or, alternatively simply use netcat: `echo -e "version" | nc 127.0.0.1 8051`.
    This program has a control port on `8051` which you can use to create I2P service(s), which is a simple plaintext protocol. To interact with it, use `tunnel-control.sh` or, alternatively simply use netcat: `echo -e "version" | nc 127.0.0.1 8051`.

    I2P-Zero comes with A GUI but we will not be using that, since you are most likely installing on a server.

    @@ -24,10 +24,11 @@ In short, I2P-Zero allows us to:
    2. Host any service on the I2P network (for example; forward a local DNS server at `127.0.0.1:53` to be available via I2P.
    3. Create a local SOCKS proxy, which you can use to tunnel traffic through.

    Our goal is to host a fully operational node over I2P, so we'll need to configure both incoming and outbound traffic over I2P:

    - For hosting monerod over I2P, we'll need option **2**.
    - For **sending** traffic into I2P we'll need option **3**.

    Our goal is to host a fully operational node over I2P, so we'll need to configure both incoming and outbound traffic over I2P.

    #### I2P-Zero installation

  12. sanderfoobar revised this gist Aug 28, 2019. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -8,7 +8,7 @@ You *should* be able to get through this document and host an I2P node in ~15 mi

    - Linux system, **can** be behind a firewall (i.e: home network)
    - Latest monero (CLI) release: [link](https://downloads.getmonero.org/cli/linux64)
    - Latest I2P-Zero: [link](https://github.com/i2p-zero/i2p-zero/releases)
    - Latest I2P-Zero (v1.11 at time of writing): [link](https://github.com/i2p-zero/i2p-zero/releases)

    ### I2P-Zero

    @@ -115,7 +115,7 @@ The above 2 flags is all that is needed to point `monerod` to your configured I2
    --restricted-rpc \
    --public-node \
    --anonymous-inbound "suspiciouslyrandomandverylongstring.b32.i2p:48083,127.0.0.1:48083" \
    --proxy i2p,127.0.0.1:48083 \
    --proxy i2p,127.0.0.1:48085 \
    --confirm-external-bind
    ```

  13. sanderfoobar revised this gist Aug 28, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -115,7 +115,7 @@ The above 2 flags is all that is needed to point `monerod` to your configured I2
    --restricted-rpc \
    --public-node \
    --anonymous-inbound "suspiciouslyrandomandverylongstring.b32.i2p:48083,127.0.0.1:48083" \
    --proxy i2p,127.0.0.1:48084 \
    --proxy i2p,127.0.0.1:48083 \
    --confirm-external-bind
    ```

  14. sanderfoobar revised this gist Aug 28, 2019. 1 changed file with 3 additions and 3 deletions.
    6 changes: 3 additions & 3 deletions monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -12,7 +12,7 @@ You *should* be able to get through this document and host an I2P node in ~15 mi

    ### I2P-Zero

    I2P-Zero (also refered to as `i2pz`) is a small footprint I2P router. It has a control port on `8051` (OR `31337` depending on the version you have) which you can use to create I2P service(s).
    I2P-Zero (also refered to as `i2pz`) is a small footprint I2P router. It has a control port on `8051` which you can use to create I2P service(s).

    The control port is a simple plaintext protocol, we can interact with it via `tunnel-control.sh` or, alternatively simply use netcat: `echo -e "version" | nc 127.0.0.1 8051`.

    @@ -36,7 +36,7 @@ Our goal is to host a fully operational node over I2P, so we'll need to configur
    3. ???
    4. w00t!!

    verify it is running: `netstat -tulpn | grep -E '8051|31337'` (we are grepping for the control port).
    verify it is running: `netstat -tulpn | grep '8051'` (we are grepping for the control port).

    Oh, if you were wondering, a `systemd` startup script is also available: `/etc/systemd/system/i2pzero.service`

    @@ -56,7 +56,7 @@ WantedBy=multi-user.target

    Change paths as you wish, reload systemd: `systemctl daemon-reload`, then you can do `service i2pzero start`.

    Again, verify it is running: `netstat -tulpn | grep -E '8051|31337'`.
    Again, verify it is running: `netstat -tulpn | grep '8051'`.

    #### Configuring I2P-Zero - creating a server

  15. sanderfoobar revised this gist Aug 28, 2019. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -77,7 +77,7 @@ To allow our node to relay incoming transactions over I2P, we need to make **out

    Execute the following to create a SOCKS tunnel:

    - `./tunnel-control.sh socks.create 127.0.0.1 48084`
    - `./tunnel-control.sh socks.create 127.0.0.1 48085`

    I2P-Zero will acknowledge the creation of this tunnel with a simple `OK`.

    @@ -98,7 +98,7 @@ We previously assigned port `48083` to our I2P server/service. Thus, our flag be
    Another flag you should include is `--proxy` ([documentation](https://github.com/monero-project/monero/blob/master/ANONYMITY_NETWORKS.md#outbound-connections)). Failure to include this flag will result in your node not being able to relay transactions into the I2P network. You should always include this flag.

    ```
    --proxy i2p,127.0.0.1:48084
    --proxy i2p,127.0.0.1:48085
    ```

    That's it.
  16. sanderfoobar revised this gist Aug 28, 2019. 1 changed file with 4 additions and 1 deletion.
    5 changes: 4 additions & 1 deletion monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -24,7 +24,10 @@ In short, I2P-Zero allows us to:
    2. Host any service on the I2P network (for example; forward a local DNS server at `127.0.0.1:53` to be available via I2P.
    3. Create a local SOCKS proxy, which you can use to tunnel traffic through.

    For hosting monerod over I2P, we'll need option **2**. For **sending** traffic into I2P we'll need option **3**. Our goal is to host a fully operational node over I2P, so we'll need to configure both incoming and outbound traffic over I2P.
    - For hosting monerod over I2P, we'll need option **2**.
    - For **sending** traffic into I2P we'll need option **3**.

    Our goal is to host a fully operational node over I2P, so we'll need to configure both incoming and outbound traffic over I2P.

    #### I2P-Zero installation

  17. sanderfoobar revised this gist Aug 28, 2019. 1 changed file with 27 additions and 8 deletions.
    35 changes: 27 additions & 8 deletions monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -24,7 +24,7 @@ In short, I2P-Zero allows us to:
    2. Host any service on the I2P network (for example; forward a local DNS server at `127.0.0.1:53` to be available via I2P.
    3. Create a local SOCKS proxy, which you can use to tunnel traffic through.

    For hosting monerod over I2P, we'll need option **2**.
    For hosting monerod over I2P, we'll need option **2**. For **sending** traffic into I2P we'll need option **3**. Our goal is to host a fully operational node over I2P, so we'll need to configure both incoming and outbound traffic over I2P.

    #### I2P-Zero installation

    @@ -57,34 +57,52 @@ Again, verify it is running: `netstat -tulpn | grep -E '8051|31337'`.

    #### Configuring I2P-Zero - creating a server

    First thing we need to do is register an I2P service/server.

    Execute **one** of the following commands:
    First thing we need to do is register an I2P service/server:

    - `./tunnel-control.sh server.create 127.0.0.1 48083`
    - `echo -e "server.create 127.0.0.1 48083" | nc 127.0.0.1 8051` (or replace port `8051` with `31337` if control port is there)

    The output will give you an I2P `b32` address, for example:

    `suspiciouslyrandomandverylongstring.b32.i2p`

    This will be the address of your I2P server/service.
    This will be the address of your I2P server/service and will be used for **incoming** connections.


    #### Configuring I2P-Zero - creating a SOCKS tunnel

    To allow our node to relay incoming transactions over I2P, we need to make **outbound** connections over I2P. To send traffic *into* I2P, we'll need to create a SOCKS tunnel. I2P-Zero can do this for us.

    Execute the following to create a SOCKS tunnel:

    - `./tunnel-control.sh socks.create 127.0.0.1 48084`

    I2P-Zero will acknowledge the creation of this tunnel with a simple `OK`.

    To monitor the tunnel:

    `./tunnel-control.sh all.list | python -m json.tool`

    #### Launching monerod

    Time to launch `monerod`. The flag we need to include is `--anonymous-inbound` ([documentation](https://github.com/monero-project/monero/blob/master/ANONYMITY_NETWORKS.md#inbound-connections)) so that `monerod` knows what our 'public' I2P server address & port is.
    Time to launch `monerod`. The flag we should include is `--anonymous-inbound` ([documentation](https://github.com/monero-project/monero/blob/master/ANONYMITY_NETWORKS.md#inbound-connections)) so that `monerod` knows what our 'public' I2P server address & port is.

    We previously assigned port `48083` to our I2P server/service. Thus, our flag becomes:

    ```
    --anonymous-inbound "suspiciouslyrandomandverylongstring.b32.i2p:48083,127.0.0.1:48083"
    ```

    Another flag you should include is `--proxy` ([documentation](https://github.com/monero-project/monero/blob/master/ANONYMITY_NETWORKS.md#outbound-connections)). Failure to include this flag will result in your node not being able to relay transactions into the I2P network. You should always include this flag.

    ```
    --proxy i2p,127.0.0.1:48084
    ```

    That's it.

    #### Conclusion

    Personally, I already hosted a public P2P and RPC Monero node, by following this document my `monerod` command ended up looking like the this:
    The above 2 flags is all that is needed to point `monerod` to your configured I2P-Zero instance. For comprehensibility, I will include the full `monerod` command that I personally use on my public RPC Monero node:

    ```
    ./monerod
    @@ -94,6 +112,7 @@ Personally, I already hosted a public P2P and RPC Monero node, by following this
    --restricted-rpc \
    --public-node \
    --anonymous-inbound "suspiciouslyrandomandverylongstring.b32.i2p:48083,127.0.0.1:48083" \
    --proxy i2p,127.0.0.1:48084 \
    --confirm-external-bind
    ```

  18. sanderfoobar revised this gist Aug 28, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -61,8 +61,8 @@ First thing we need to do is register an I2P service/server.

    Execute **one** of the following commands:

    - `echo -e "server.create 127.0.0.1 48083" | nc 127.0.0.1 8051` (or replace port `8051` with `31337` if control port is there)
    - `./tunnel-control.sh server.create 127.0.0.1 48083`
    - `echo -e "server.create 127.0.0.1 48083" | nc 127.0.0.1 8051` (or replace port `8051` with `31337` if control port is there)

    The output will give you an I2P `b32` address, for example:

  19. sanderfoobar revised this gist Aug 28, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -84,7 +84,7 @@ That's it.

    #### Conclusion

    I previously already hosted a public P2P and RPC Monero node, by following this document my command ended up looking like the this:
    Personally, I already hosted a public P2P and RPC Monero node, by following this document my `monerod` command ended up looking like the this:

    ```
    ./monerod
  20. sanderfoobar revised this gist Aug 28, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -97,7 +97,7 @@ I previously already hosted a public P2P and RPC Monero node, by following this
    --confirm-external-bind
    ```

    More information/documentation:
    Further readings:

    - [I2P-Zero project page](https://github.com/i2p-zero/i2p-zero).
    - [Anonymity Networks with Monero](https://github.com/monero-project/monero/blob/master/ANONYMITY_NETWORKS.md)
  21. sanderfoobar revised this gist Aug 28, 2019. 1 changed file with 5 additions and 1 deletion.
    6 changes: 5 additions & 1 deletion monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -97,4 +97,8 @@ I previously already hosted a public P2P and RPC Monero node, by following this
    --confirm-external-bind
    ```

    Make sure to check out I2P-Zero over at [their project page](https://github.com/i2p-zero/i2p-zero).
    More information/documentation:

    - [I2P-Zero project page](https://github.com/i2p-zero/i2p-zero).
    - [Anonymity Networks with Monero](https://github.com/monero-project/monero/blob/master/ANONYMITY_NETWORKS.md)
    - [vtnerd's "Broadcast Transactions over Tor Hidden Service" CCS proposal](https://ccs.getmonero.org/proposals/vtnerd-tor-tx-broadcasting.html)
  22. sanderfoobar revised this gist Aug 28, 2019. 1 changed file with 0 additions and 1 deletion.
    1 change: 0 additions & 1 deletion monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -38,7 +38,6 @@ verify it is running: `netstat -tulpn | grep -E '8051|31337'` (we are grepping f
    Oh, if you were wondering, a `systemd` startup script is also available: `/etc/systemd/system/i2pzero.service`

    ```
    # by knaccc
    [Unit]
    Description=i2pzero
  23. sanderfoobar revised this gist Aug 28, 2019. 1 changed file with 2 additions and 0 deletions.
    2 changes: 2 additions & 0 deletions monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -81,6 +81,8 @@ We previously assigned port `48083` to our I2P server/service. Thus, our flag be
    --anonymous-inbound "suspiciouslyrandomandverylongstring.b32.i2p:48083,127.0.0.1:48083"
    ```

    That's it.

    #### Conclusion

    I previously already hosted a public P2P and RPC Monero node, by following this document my command ended up looking like the this:
  24. sanderfoobar revised this gist Aug 28, 2019. 1 changed file with 5 additions and 4 deletions.
    9 changes: 5 additions & 4 deletions monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -38,6 +38,7 @@ verify it is running: `netstat -tulpn | grep -E '8051|31337'` (we are grepping f
    Oh, if you were wondering, a `systemd` startup script is also available: `/etc/systemd/system/i2pzero.service`

    ```
    # by knaccc
    [Unit]
    Description=i2pzero
    @@ -80,7 +81,9 @@ We previously assigned port `48083` to our I2P server/service. Thus, our flag be
    --anonymous-inbound "suspiciouslyrandomandverylongstring.b32.i2p:48083,127.0.0.1:48083"
    ```

    For example, monerod might be called like this:
    #### Conclusion

    I previously already hosted a public P2P and RPC Monero node, by following this document my command ended up looking like the this:

    ```
    ./monerod
    @@ -93,6 +96,4 @@ For example, monerod might be called like this:
    --confirm-external-bind
    ```

    #### Conclusion

    Thank you for keeping Monero anonymous and decentralized :-)
    Make sure to check out I2P-Zero over at [their project page](https://github.com/i2p-zero/i2p-zero).
  25. sanderfoobar revised this gist Aug 28, 2019. 1 changed file with 5 additions and 5 deletions.
    10 changes: 5 additions & 5 deletions monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -61,8 +61,8 @@ First thing we need to do is register an I2P service/server.

    Execute **one** of the following commands:

    - `echo -e "server.create 127.0.0.1 28083" | nc 127.0.0.1 8051` (or replace port `8051` with `31337` if control port is there)
    - `./tunnel-control.sh server.create 127.0.0.1 28083`
    - `echo -e "server.create 127.0.0.1 48083" | nc 127.0.0.1 8051` (or replace port `8051` with `31337` if control port is there)
    - `./tunnel-control.sh server.create 127.0.0.1 48083`

    The output will give you an I2P `b32` address, for example:

    @@ -74,10 +74,10 @@ This will be the address of your I2P server/service.

    Time to launch `monerod`. The flag we need to include is `--anonymous-inbound` ([documentation](https://github.com/monero-project/monero/blob/master/ANONYMITY_NETWORKS.md#inbound-connections)) so that `monerod` knows what our 'public' I2P server address & port is.

    We previously assigned port `28083` to our I2P server/service. Thus, our flag becomes:
    We previously assigned port `48083` to our I2P server/service. Thus, our flag becomes:

    ```
    --anonymous-inbound "suspiciouslyrandomandverylongstring.b32.i2p:28083,127.0.0.1:28083"
    --anonymous-inbound "suspiciouslyrandomandverylongstring.b32.i2p:48083,127.0.0.1:48083"
    ```

    For example, monerod might be called like this:
    @@ -89,7 +89,7 @@ For example, monerod might be called like this:
    --rpc-bind-port 18089 \
    --restricted-rpc \
    --public-node \
    --anonymous-inbound "suspiciouslyrandomandverylongstring.b32.i2p:28083,127.0.0.1:28083" \
    --anonymous-inbound "suspiciouslyrandomandverylongstring.b32.i2p:48083,127.0.0.1:48083" \
    --confirm-external-bind
    ```

  26. sanderfoobar revised this gist Aug 28, 2019. 1 changed file with 2 additions and 14 deletions.
    16 changes: 2 additions & 14 deletions monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -72,27 +72,15 @@ This will be the address of your I2P server/service.

    #### Launching monerod

    Time to launch `monerod`. If you are already hosting a remote node (THANK YOU!!) you might have something like this:

    ```
    ./monerod
    --max-concurrency 4 \
    --rpc-bind-ip YOUR.IP \
    --rpc-bind-port 18089 \
    --restricted-rpc \
    --public-node \
    --confirm-external-bind
    ```

    We need to add a flag to this command called `--anonymous-inbound` ([documentation](https://github.com/monero-project/monero/blob/master/ANONYMITY_NETWORKS.md#inbound-connections)) so that `monerod` knows what our 'public' I2P server address & port is.
    Time to launch `monerod`. The flag we need to include is `--anonymous-inbound` ([documentation](https://github.com/monero-project/monero/blob/master/ANONYMITY_NETWORKS.md#inbound-connections)) so that `monerod` knows what our 'public' I2P server address & port is.

    We previously assigned port `28083` to our I2P server/service. Thus, our flag becomes:

    ```
    --anonymous-inbound "suspiciouslyrandomandverylongstring.b32.i2p:28083,127.0.0.1:28083"
    ```

    Everything slapped together:
    For example, monerod might be called like this:

    ```
    ./monerod
  27. sanderfoobar revised this gist Aug 28, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -107,4 +107,4 @@ Everything slapped together:

    #### Conclusion

    Not much to conclude really. Have fun!
    Thank you for keeping Monero anonymous and decentralized :-)
  28. sanderfoobar revised this gist Aug 28, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -61,7 +61,7 @@ First thing we need to do is register an I2P service/server.

    Execute **one** of the following commands:

    - `echo -e "server.create 127.0.0.1 28083" | nc 127.0.0.1 8051`
    - `echo -e "server.create 127.0.0.1 28083" | nc 127.0.0.1 8051` (or replace port `8051` with `31337` if control port is there)
    - `./tunnel-control.sh server.create 127.0.0.1 28083`

    The output will give you an I2P `b32` address, for example:
  29. sanderfoobar revised this gist Aug 28, 2019. 1 changed file with 3 additions and 2 deletions.
    5 changes: 3 additions & 2 deletions monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -59,11 +59,12 @@ Again, verify it is running: `netstat -tulpn | grep -E '8051|31337'`.

    First thing we need to do is register an I2P service/server.

    Execute **one** of the following commands:

    - `echo -e "server.create 127.0.0.1 28083" | nc 127.0.0.1 8051`
    OR
    - `./tunnel-control.sh server.create 127.0.0.1 28083`

    The server will respond with an I2P `b32` address, for example:
    The output will give you an I2P `b32` address, for example:

    `suspiciouslyrandomandverylongstring.b32.i2p`

  30. sanderfoobar revised this gist Aug 28, 2019. 1 changed file with 3 additions and 3 deletions.
    6 changes: 3 additions & 3 deletions monero_rpc_i2p.md
    Original file line number Diff line number Diff line change
    @@ -12,9 +12,9 @@ You *should* be able to get through this document and host an I2P node in ~15 mi

    ### I2P-Zero

    I2P-Zero (also refered to as `i2pz`) is a small footprint I2P router. It has a control port on `8051` (OR `31337` depending on the version you have) which we can use to create I2P service(s).
    I2P-Zero (also refered to as `i2pz`) is a small footprint I2P router. It has a control port on `8051` (OR `31337` depending on the version you have) which you can use to create I2P service(s).

    The control port itself simple plaintext protocol, you can interact with it via `tunnel-control.sh` or, alternatively simply use netcat: `echo -e "version" | nc 127.0.0.1 8051`.
    The control port is a simple plaintext protocol, we can interact with it via `tunnel-control.sh` or, alternatively simply use netcat: `echo -e "version" | nc 127.0.0.1 8051`.

    I2P-Zero comes with A GUI but we will not be using that, since you are most likely installing on a server.

    @@ -24,7 +24,7 @@ In short, I2P-Zero allows us to:
    2. Host any service on the I2P network (for example; forward a local DNS server at `127.0.0.1:53` to be available via I2P.
    3. Create a local SOCKS proxy, which you can use to tunnel traffic through.

    For hosting monerod over I2P, we'll need option 2.
    For hosting monerod over I2P, we'll need option **2**.

    #### I2P-Zero installation