Ansible multiple hosts behind NAT port forwarding
I have 2 servers behind NAT, so they share the same IP address, SSH service runs on two different ports. Here is my ansible inventory file.
[web]
195.154.255.26 ansible_connection=ssh ansible_ssh_user=root ansible_ssh_pass=serverok123 ansible_port=4000
195.154.255.26 ansible_connection=ssh ansible_ssh_user=root ansible_ssh_pass=serverok123 ansible_port=4001
When I run the ansible command against the inventory file, it only gets executed on one of the servers.
![ansible hosts behind NAT proxy](https://serverok.in/wp-content/uploads/2022/10/ansible-hosts-behind-nat-proxy.webp)
Solution
The problem is that all the hosts have the same IP address. You need to use a unique name, so Ansible can identify each host separately.
I updated the inventory file as follows to get it to work.
[web]
port4000 ansible_ssh_host=195.154.255.26 ansible_connection=ssh ansible_ssh_user=root ansible_ssh_pass=serverok123 ansible_port=4000
port4001 ansible_ssh_host=195.154.255.26 ansible_connection=ssh ansible_ssh_user=root ansible_ssh_pass=serverok123 ansible_port=4001
port4000, and port4001 can be any unique name that can be used to identify the hosts. If hosts have a unique hostname, you can use it.
After the change, I can execute commands on both hosts that are behind NAT port forwarding.
![ansible 2 servers with different ports behind nat](https://serverok.in/wp-content/uploads/2022/10/ansible-hosts-behind-nat-forwarding.webp)
Back to Ansible