Destination Server under VPN

Hi everyone,

I’m running Otto on two FileMaker 2024 servers and running into a deployment issue that I think is related to VPN visibility.

Server details

Source (Linux – external)

  • Platform: Ubuntu 22.04 (AWS AMI: amazon/ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-server-20230516)
  • FileMaker Server: 22.0.2
  • OttoFMS: 4.11.1
  • SSL certificate: valid and trusted

Destination (Windows – internal, VPN required)

  • Platform: Windows Server 2022 Standard, Version 21H2 (Build 20348.4171)
  • FileMaker Server: 21.0.2
  • OttoFMS: 4.13.1
  • SSL certificate: valid and trusted
  • Access: only reachable when connected to VPN

Both Otto installations are configured and operational, and I can reach each one individually. When connected to the VPN, I can access the Windows FileMaker server directly via RDP or FileMaker Pro with no issues.

However, when I try to run a Deploy operation in Otto from the Linux source server to the Windows destination, the process fails. Based on the error logs (attached), it looks like the source server cannot reach the destination server.

My assumption is that the actual file transfer during Deploy happens directly server-to-server, not routed through my local client machine. Because the Linux server is outside the VPN, it can’t see the Windows destination that’s only accessible within the VPN.

Can anyone confirm whether Otto Deploy traffic flows directly between the two servers (rather than through the initiating client)?

And if so, what’s the recommended approach when one server is VPN-restricted?

Hey @obospieler ,

By default, OttoFMS does two way communication between the two servers for the deployments to run deployments. The OttoDeploy client is only the triggering agent.

There is an option called “Push Build to Destination” which you can toggle off to make the deployment do only one way communication from the destination. Check out the Advanced Deployment options docs for details on toggling that off. Once you toggle it off all calls are made from the destination to the source rather than both ways.

-Kyle

1 Like

Thank you Kyle. It is still not working for me after unchecking that box. I tried twice today just now. And remembered that maybe after I updated the file maker server admin console credentials on the production box that perhaps I hadn’t updated them in Otto. After doing that I got a new error…

You’ll see in my logs that I did have a permission issue the first time. But the second time I can’t tell what I’ve done wrong.

Here is the OttoDeploy View

It looks to me like the destination hostname can’t be resolved from the source server. Both machines have valid SSL certificates, and I can reach each Otto interface independently (the destination via VPN, the source from the open internet).

At this point, my best guess is that the source Linux server is still trying to “see” the internal destination host even though it’s not accessible without VPN. I’d appreciate confirmation on whether the “Push Build to Destination” option completely reverses that network direction, meaning, if it’s turned off, all traffic should originate from the destination toward the source (so the VPN restriction wouldn’t matter).

Having that option turned off should completely prevent that log you see where it says “error pushing build.” if you do the “copy deployment json” button in OttoDeploy is the push build option turned off? It should be in the json somewhere.

Having the push build option turned off will cause all network requests to initiate from the destination. It’s explicitly for exactly your use case where you have a destination server behind a vpn.

Your theory was correct. The “pushBuild” boolean is true regardless of the toggle on the UI. What would you recommend I do/try?

ohhhh…

I switched to Advanced Settings and then the toggle to push the build did effect the JSON. This looks promising. Testing now…

It worked!!!

Woohoo! I had forgotten it, but that is actually a known issue with OttoDeploy. I’ll see if its feasible to release a new version of OttoDeploy with the fix this week.

Let me know if you have any more issues!

-Kyle

Hi Kyle!

So here is a new issue that I suspect is directly related to this VPN and/or “Push build to destination” issue.

My goal is to make a fresh DEV copy of their files onto our server to do work on their separation-model FileMaker files.

It seems like I can push files TO there “PROD” server but I can’t get them to go the other way.

I get this error regardless of if I have “Push to destination” toggled on or off.

I suspect that this has to do with the way that they have their DNS setup. What do you think?

Clicking test here works though. I just can push files from this server. I can only push files onto it (by turning “Push Files to Destination” off)

Hey Kevin,

If the source server can talk to the destination but not the other way around, you’ll need to follow the recommendation of the test modal and push the build to the destination before the deployment. This means going into the builds tab of OttoDeploy, creating a new build with the files you need (clones for migrations, copies for installs or replaces) and publishing that build to your destination server. Then in your deployment you can choose “Destination server outbox” as your source instead of the source server and choose your build from the list.

For background: OttoFMS deployments between two servers (unless done in separate steps like the above or like publishing to a shared s3 location) always require the destination server to be able to talk to the source server. This is so that the destination server can start a just in time build, fetch build status, or just tell the source server to push the build to the destination. Turning off the “push build” setting removes the need for the source server to talk to the destination server as the destination server directly downloads the build instead of the source server pushing the build via upload to the destination.

Try making a build ahead of time and publishing it to your destination server, that should get around this issue for you.

-Kyle

I think I’m confused. I’m sorry Kyle.

I don’t fully even understand what a “build” is in the FileMaker sense. I have only to servers DEV and PROD and I’d like to get a new copy of the PROD file onto our DEV server for development and testing with newer data.

I have successfully done a “dev” to “prod” deployment by turning off the “Push to destination” in advanced settings.

But now I want to make a new copy onto my dev server. Therefore going from “prod” to “dev”.

I am remote into PROD (under VPN), I can even “see” the PROD server from the “dev” server.

So why can’t PROD push to DEV when PROD is the one under VPN?

This is the part I don’t understand.

Hey Kevin,

The reason the VPN is an issue for your Prod → Dev deployment is because deployments run on the destination. In OttoFMS a “buiild” is just a zip file of the .fmp12 files that are being used for the deployment. The flow works like this for the deployments you’re running:

For your Dev → Prod deployent:

  1. You trigger a deployment from OttoDeploy. This sends a request from OttoDeploy to your Prod server installation of OttoFMS to start a deployment.
  2. OttoFMS sends a request from your Prod Server to your Dev server collect and download the files for the deployment. The reason this failed when you had “Push build” turned on is that your Dev server cannot talk to your prod server. When doing a build push, the destination server (your prod server) requests that the source server (your dev server) upload the build using multi-part uploads. This requires both servers be able to talk to each other. turning off the push build makes it so that only destination → source communication is necessary.
  3. OttoFMS gets the build and runs the rest of the deployment

For your Prod → Dev deployment:

  1. You trigger a deployment from OttoDeploy. This sends a request to your dev server install of OttoFMS to run a deployment with your prod server as the source.
  2. Your dev server attempts to connect to your prod server to request the files that are needed for the deployment. Since your prod server is on a restricted network, your dev server cannot make this connection and the deployment fails. This fails when “Push build” is on and when it is off because both cases require that the destination server (dev) be able to talk to the source (prod).

The workaround I gave you makes it so that you run this deployment in 2 parts:

  1. Run a build on your prod server and publish it.
    This will create the clones or copies, package them into a zip file, and send them to your dev server. You can do this all from the “Builds” tab in OttoDeploy. You should select the files on the prod server you want to move to dev, create copies if you’re trying to move the data or clones if you’re trying to move the schema, then toggle on the “publish” option and choose your dev server as the destination.
  2. After running the build, run a deployment with the source as “Build Inbox” instead of your prod server
    Since your dev server can’t talk to your prod server we have now moved the files from prod to dev ahead of time so that the deployment simply needs to pick up the files from the build inbox on your dev server. The depoyment will run the exact same way it normally would, it will just use the files that are already present in the dev server build inbox instead of fetching new ones from your prod server.

I know that was a lot of text, but that is the full explanation of what is going on. There are docs that cover most of these concept and how build publishing works. Does that all make sense?

-Kyle

@kduval!!! You are helpful and adorable as usual!! I’m busing the build as we speak at and appears to be working!

1 Like