У меня есть сервер в myserver.com
, и я хочу, чтобы люди в Интернете могли получить доступ к этому серверу, используя его имя, но я хочу, чтобы весь исходящий трафик, который не является прямым ответом на входящий трафик, проходил через VPN. , Например, на сервере установлена передача, и я хочу, чтобы передача всегда проходила через VPN, но если кто-то получает доступ к веб-странице на сервере, сервер не должен пытаться отвечать через VPN, потому что, очевидно, это не имеет смысла. Я настроил это один раз несколько лет назад, используя несколько приемлемых правил и маршрутов. Я помню, это было всего несколько строк, но я не могу на всю жизнь вспомнить точные правила. Я попробовал несколько вариантов правил, показанных ниже (найдено здесь и здесь ), но безрезультатно.
sudo iptables -t mangle -A OUTPUT -p tcp -m multiport --sports 80,443,22 -j MARK --set-mark 10
sudo ip route add table 100 default via 192.168.1.1
sudo ip rule add fwmark 10 table 100
sudo ip route flush cache
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Понял, основываясь на информации, которую я нашел здесь . Для полноты я повторю то, что там было сказано:
Это классическая проблема. Когда вы подключаете свой сервер, используя его публичный IP-адрес, возвращаемые пакеты маршрутизируются через VPN. Вы должны заставить эти пакеты маршрутизироваться через общедоступный интерфейс Ethernet. Эти команды правила / маршрута должны выполнять свою работу:
ip rule add from x.x.x.x table 128
ip route add table 128 to y.y.y.y/y dev ethX
ip route add table 128 default via z.z.z.z
Где x.x.x.x
- публичный IP-адрес вашего сервера, y.y.y.y/y
- подсеть общедоступного IP-адреса вашего сервера, ethX
- публичный Ethernet вашего сервера. интерфейс, и z.z.z.z
ваш шлюз по умолчанию. Например:
ip rule add from 172.16.9.132 table 128
ip route add table 128 to 172.16.9.0/24 dev eth0
ip route add table 128 default via 172.16.9.1
Важно отметить, что в приведенном выше примере используется общедоступный IP-адрес сервера, но, поскольку я нахожусь за маршрутизатором, и все подключения к серверу перенаправляются с маршрутизатора, я можно просто использовать локальный IP-адрес сервера, как показано в примере ниже:
ip rule add from 192.168.1.10 table 128
ip route add table 128 to 192.168.1.0/24 dev eth0
ip route add table 128 default via 192.168.1.1
Вероятно, вы захотите, чтобы эти правила сохранялись после перезагрузки. Есть несколько способов, которые можно сделать, например, добавить правила в файл etc/network/interfaces
в соответствующем интерфейсе, как показано ниже:
# Only packets related to connections initiated by this machine should go
# through the VPN. All other packets should be routed around the VPN. This
# allows this machine to be accessed via its public IP, but prevents its
# public IP from being exposed by services like transmission.
up ip rule add from 192.168.1.5 table 128
up ip route add table 128 to 192.168.1.0/24 dev enp4s0
up ip route add table 128 default via 192.168.1.1
down ip route del table 128 default via 192.168.1.1
down ip route del table 128 to 192.168.1.0/24 dev enp4s0
down ip rule del from 192.168.1.5 table 128