У меня есть сервер в myserver.com, и я хочу, чтобы люди в Интернете могли получить доступ к этому серверу, используя его имя, но я хочу, чтобы весь исходящий трафик, который не является прямым ответом на входящий трафик для прохождения VPN , Например, сервер имеет установленную передачу, и я хочу, чтобы передача всегда проходила через VPN, но если кто-то обращается к веб-странице на сервере, сервер не должен пытаться реагировать на VPN, потому что, очевидно, это не имеет смысла. Я установил это несколько лет назад, используя некоторые правила iptable и маршруты. Я помню, что это было всего несколько строк, но я не могу, чтобы жизнь меня помнила точные правила. Я пробовал несколько вариантов правил, приведенных ниже (здесь и здесь), но безрезультатно.
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
Понял, основываясь на информации, которую я нашел здесь. Для полноты я повторю то, что там было сказано:
Это классическая проблема. Когда вы подключаете свой сервер с использованием общедоступного 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