Hi all,

As the title suggests, I’m trying to run an ejabberd (xmpp) server behind an nginx reverse proxy. The reason is, I want to be able to run the server on my raspberry pi at home, but have people connect to it through my VPS, which is running nginx. This would be nice because I don’t need a static ip and I don’t have to leak my ip address.

I have looked this up, but have not found an answer that works exactly for my use case.

My current nginx configuration looks like this:

stream {
	upstream xmppserver {
		server 10.8.0.3:5223;
	}

	upstream turnserver {
		server 10.8.0.3:3478;
	}

	map $ssl_preread_alpn_protocols $upstream {
		"xmpp-client" xmppserver;
		"stun.turn" turnserver;
		"stun.nat-discovery" turnserver;
	}

	server {
		listen 6969;
		proxy_pass $upstream;
		proxy_protocol on;
	}
}

And I have a DNS entry telling XMPP clients to contact my server at port 6969 (this was just for testing):

I would also need to figure out how to supply ejabberd with the correct certificates for the domain. Since it’s running on a different computer than the reverse proxy, would I have to somehow copy the certificate over every time it has to be renewed?

Thank you for your help.

  • Ádám@discuss.tchncs.deOP
    link
    fedilink
    English
    arrow-up
    1
    ·
    1 year ago

    The vps communicates with the rpi through a vpn.

    I have not heard of duck dns nor lstio, but I’ll check it out when I get home.

    • thelastknowngod
      link
      fedilink
      English
      arrow-up
      1
      ·
      1 year ago

      Istio is a service mesh. You basically run proxies on the vps and the rpi. The apps make calls to localhost and the proxy layer figures out the communication between each proxy.

      Duck dns is just a dynamic dns service. It gives you a stable address even if you don’t have a static ip.

      • Ádám@discuss.tchncs.deOP
        link
        fedilink
        English
        arrow-up
        1
        ·
        1 year ago

        How would I use that in this situation? I don’t get it. I already have a vpn set up to communicate between the two devices, and have been successfully running multiple services in this configuration for about a month. It’s just XMPP that I’m having trouble with.

        • thelastknowngod
          link
          fedilink
          English
          arrow-up
          1
          ·
          1 year ago

          It auto discovers machines/instances/VMs/containers in the mesh and figures out the secure routing on the fly. If you couldn’t ensure a consistent IP from the home address it wouldn’t matter… The service mesh would work it out.

          It is probably overkill for this project though… Something to think about…