
Как направить трафик на мои маршруты IPv4, за исключением адреса 0.0.0.0,
так как я не хочу, чтобы он был интерфейсом по умолчанию
по умолчанию через 192.168.5.1 dev enp7s0 proto dhcp metric 100 169.254.0.0/16 dev enp7s0 область ссылки метрика 1000 192.168.5.0/24 dev enp7s0 proto ядро область ссылка src 192.168.5.84 metric 100 192.168.60.0/24 dev vpn_softether proto ядро область ссылка src 192.168.60.50 209.80.36.170 через 192.168.60.1 dev vpn_softether 216.117.82.227 через 192.168.60.1 dev vpn_softether
Я хочу сделать vpn_softether интерфейсом по умолчанию
. Что я уже пробовал...
ip r добавить 0.0.0.0/1 через 0.0.0.0 dev vpn_softether ip r добавить 128.0.0.0/1 через 0.0.0.0 dev vpn_softether ip r add 0.0.0.0/1 через 192.168.5.1 ip r add 128.0.0.0/1 через 192.168.5.1 ip r добавить по умолчанию через 192.168.60.1 ip r del 0.0.0.0/1 через 192.168.60.1 dev vpn_softether ip r del 128.0.0.0/1 через 192.168.60.1 dev vpn_softether ip r del 0.0.0.0/1 через 192.168.5.1 ip r del 128.0.0.0/1 через 192.168.5.1 ip r add 0.0.0.0/1 через 192.168.5.1 dev enp7s0 proto dhcp metric 100 ip r add 128.0.0.1/1 через 192.168.5.1 dev enp7s0 proto dhcp metric 100 ip r del 0.0.0.0/1 через 192.168.5.1 dev enp7s0 proto dhcp metric 100 ip r del default через 192.168.60.1 dev vpn_softether ip r del 128.0.0.0/1 через 192.168.5.1 dev enp7s0 proto dhcp metric 100 ip r del 0.0.0.0/1 через 192.168.60.1 dev vpn_softether proto dhcp метрика 100 ip r del default через 192.168.5.1 dev enp7s0 ip r del 128.0.0.0/1 через 192.168.60.1 dev vpn_softether proto dhcp метрика 100 ip r add 0.0.0.0/1 через 192.168.60.1 dev vpn_softether ip r добавить по умолчанию через 192.168.5.1 dev enp7s0 proto dhcp metric 100 ip r добавить 128.0.0.0/1 через 192.168.60.1 dev vpn_softether
но это не сработало... Есть ли другой способ сделать это?
Спасибо.
решение1
Обратите внимание, что вы можете направить «весь трафик» только наодининтерфейс, а не каким-то образом ко всем из них.
Если вы хотите сохранить маршрут по умолчанию (по каким-либо причинам), оставьте маршрут по умолчанию, не добавляйте и не удаляйте его. Если вы можете добавить или удалить его, вам не нужно сохранять маршрут по умолчанию...
Так,
ip route add 0.0.0.0/1 via 192.168.60.1 dev vpn_softether
ip route add 128.0.0.0/1 via 192.168.60.1 dev vpn_softether
должно работать, предполагая, что шлюз на vpn_softether
действительно 192.168.60.1
. Обратите внимание, что вам также нужно правило для отправки туда, куда подключен ваш VPN из enp7s0
, иначе VPN не сможет связаться с другой конечной точкой, и в результате у вас вообще не будет соединения. Так что-то вроде
ip route add 1.2.3.4/32 via 192.168.5.1 dev enp7s0
где 1.2.3.4
IP-адрес другой конечной точки. Сохранение default
правила для этого (если это было вашей мотивацией для этого условия) будетнетработа.
решение2
Хочу добавить к предыдущему ответу:
ip route add 1.2.3.4/32 via 192.168.5.1 dev enp7s0
Это неправильный подход. Этот маршрут исчезнет, когда enp7s0
выключен. Этот маршрут не появится, когда enp7s0
выйдет в онлайн. Между тем, ваш интерфейс VPN будет в сети, но он не будет работать, потому что не сможет достичь 1.2.3.4
.
Вы можете динамически создать этот маршрут с помощью netplan, когда enp7s0
он запущен. Но этот маршрут состоит из IP-адреса, имени сетевого интерфейса и IP-адреса шлюза. Это означает, что оннепереносимо между разными сетями. Практика показывает, что это решение слишком болезненно и поэтому не рекомендуется. Вы забудете о том, что добавили важный маршрут в netplan в краткосрочной перспективе. Позже этот маршрут станет для вас проблемой. Использовать это решение в большой сети совершенно невозможно.
Правильным решением будет исключить 1.2.3.4
из маршрута по умолчанию, который вы создаете для перенаправления трафика VPN.пример решения для Wireguard. Вам нужно исключить 1.2.3.4/32
из 0.0.0.0/0
и поместить результат в AllowedIPs
. Онлайнкалькулятор здесь. Вы можете прочитать там абзац «лучшая альтернатива», но автор не прав, альтернатив нет.
Например, 0.0.0.0/0
минус 1.2.3.4/32
будет:
AllowedIPs = 0.0.0.0/8, 1.0.0.0/15, 1.2.0.0/23, 1.2.2.0/24, 1.2.3.0/30, 1.2.3.5/32, 1.2.3.6/31, 1.2.3.8/29, 1.2.3.16/28, 1.2.3.32/27, 1.2.3.64/26, 1.2.3.128/25, 1.2.4.0/22, 1.2.8.0/21, 1.2.16.0/20, 1.2.32.0/19, 1.2.64.0/18, 1.2.128.0/17, 1.3.0.0/16, 1.4.0.0/14, 1.8.0.0/13, 1.16.0.0/12, 1.32.0.0/11, 1.64.0.0/10, 1.128.0.0/9, 2.0.0.0/7, 4.0.0.0/6, 8.0.0.0/5, 16.0.0.0/4, 32.0.0.0/3, 64.0.0.0/2, 128.0.0.0/1
К сожалению, это решение не идеально: у вас может быть несколько VPN, и поэтому вам придется исключить все конечные IP-адреса из каждого маршрута VPN по умолчанию.
Например, если у вас есть 2 VPN и вы хотите добавить еще одну, вам нужно исключить IP третьей конечной точки из разрешенных IP двух существующих конфигураций VPN. Будет лучше, если у Wireguard будет внутренний калькулятор или DisallowedIPs
функционал.
Поэтому мое решение — исключить AllowedIPs
в конфигурации и создать маршруты по умолчанию самостоятельно. Я использую следующеекалькулятор-исключательнаписано на python. Вам нужно сделать следующее:
- Соберите все конечные точки из всех конфигураций клиента Wireguard.
- Разрешить все конечные точки.
- Исключить целевые конечные точки из
0.0.0.0/0
(и из::/0
). - Добавьте маршруты по умолчанию для каждого IP-блока, полученного от калькулятора.
P.S. Могу порекомендовать вам добавлять эти маршруты в отдельную таблицу для каждого VPN-интерфейса. Потому что их будет куча.
PS Я сделал свой route-up.client.sh
и route-down.client.sh
какпубличная суть здесь.
Table = off
PostUp = /etc/wireguard/route-up.client.sh 51820 wg0 10.20.3.0/24 fd10:20:3::/64 10
PreDown = /etc/wireguard/route-down.client.sh 51820