У нас есть 2 сервера: сервер1, сервер2. Мой компьютер - клиент1. У нас есть сервер VPN, работающий на сервере1 с IP 1.2.3.4 (просто пример). Мы хотим скрыть некоторые службы за VPN, включая sshd и vnc server.
Часть конфигурации vpn:
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1"
push "remote-gateway vpn_server_ip"
push "dhcp-option DNS 8.8.8.8"
Часть конфигурации iptables:
PRIVATE=10.8.0.0/24
sudo iptables -t nat -A POSTROUTING -s $PRIVATE -o eno1 -j MASQUERADE
Что работает: если я подключен к VPN, я могу подключиться к server2 по ssh (скажем, по IP 1.2.3.5), и в последнем сообщении о входе в систему из SSH вместо IP-адреса отображается адрес VPN-сервера.
ssh server2
приведет к:
Last login: Tue Aug 2 15:55:46 2016 from server1
Но когда я подключаюсь к нашему server1, на котором работает VPN, у меня все еще есть свой IP (он также включен в брандмауэре):
ssh server1
выход:
Last login: Tue Aug 2 15:57:38 2016 from client1
Я хочу, чтобы там IP сервера 1.2.3.4 вместо client1 IP. Поэтому я могу принимать только пакеты от server1 в нашем брандмауэре. Теперь это работает для server2, но не для server1, потому что POSTROUTING влияет только на выходные пакеты.