Маршрутызацыя аднаго акаўнта Linux праз OpenVPN правілам UID
Правіла uidrange змяшчае IPv4-сокеты аднаго акаўнта ў існуючы тунэль без namespace. DNS, IPv6 і рэзерв вырашайце асобна, потым праверце.
Маршрутызацыя па акаўнце падыходзіць, калі кожны IPv4-сокет, якім валодае адзін карыстальнік Linux, павінен выходзіць праз існуючы тунэль, і не падыходзіць, калі патрэбна ізаляцыя на ўзроўні праграм. Яна выбірае па UID, таму ўсё, што працуе ад гэтага акаўнта, трапляе ў ахоп, уключна з пакетным заданнем, пра якое вы забыліся. Вырашыце гэтае пытанне, перш чым кранаць хоць адно ip rule.
Прыклад ніжэй мяркуе асобны акаўнт браўзера з UID 1500, тунэльную прыладу tun-office з лакальным адрасам 10.80.0.11 і VPN, які дазваляе згаданыя прызначэнні. Сам дэман працуе па-за гэтым UID.
Тры ўмовы, якія вызначаюць механізм
Выбірайце правіла UID, калі ідэнтычнасць, якая выконвае працу, гэта акаўнт, калі перанос усяго яго трафіку прымальны і калі namespace быў бы цяжэйшым, чым заслугоўвае задача. Выбірайце сеткавы namespace, калі працоўная нагрузка патрабуе ўласных інтэрфейсаў, рэзалвера і табліцы маршрутызацыі. Выбірайце проксі або прывязку на кожны працэс калі менавіта адна праграма павінна перамясціцца, пакуль астатняя частка сеансу застаецца на лакальным шляху. Запіс гэтых трох пунктаў прадухіляе правіла, якое ціха ахоплівае больш, чым задумана.
Памылка, якой трэба пазбягаць, гэта меркаванне, што запускальнік вызначае ўладальніка. Браўзер, які атрымаў URL з сеансу іншага карыстальніка, не стварыў сокетаў пад UID 1500, і ніякае правіла не перанясе створаны ім трафік.
Табліца, правіла і засцерагальнік
Пасля праверкі існых правіл і выбару невыкарыстаных нумароў табліцы і прыярытэту схема кароткая: маршрут па змаўчанні ў асобнай табліцы з адрасам крыніцы тунэлю, правіла, якое накіроўвае запыты акаўнта ў гэтую табліцу, і тэрмінальнае правіла, якое блакуе рэзерв. У запісаным выглядзе гэта ідэмпатэнтная замена маршруту, ip -4 route replace default dev tun-office src 10.80.0.11 table 51820, за якой ідзе ip -4 rule add priority 12100 uidrange 1500-1500 lookup 51820.
Засцерагальнік гэта ip -4 rule add priority 12101 uidrange 1500-1500 unreachable, і ён важнейшы, чым падказвае яго даўжыня. Без яго адсутны маршрут у табліцы 51820 правальваецца ў звычайны верхні канал, і акаўнт ціха выпускае трафік, які павінна была перахапіць палітыка. З ім той самы збой становіцца тайм-аўтам, гэта значыць блакаваннем, а не рэзервам.
Трымайце звычайнае правіла лакальнага адраса перад гэтымі і свядома вырашыце, ці павінны выключэнні LAN або кіравання ісці перад выбранай табліцай. Знойдзены там маршрут па змаўчанні не звяртаецца пазней да main па больш канкрэтны маршрут LAN, што здзіўляе тых, хто чакае, што супастаўленне самага доўгага прэфікса дзейнічае паміж табліцамі. Запішыце меркаваны спіс выключэнняў у нататку пра змену, пакуль разважанне яшчэ свежае.
Што пакідае па-за ўвагай маршрутызацыя UID: DNS
Дэман рэзалвера адкрывае свае верхнія сокеты пад уласным UID, таму выбар 1500 не пераносіць гэтыя запыты ў табліцу 51820. Інтэграцыя DNS гэта асобнае рашэнне: накіруйце акаўнт на рэзалвер, дасяжны праз тунэль, або прыміце, што развязанне імёнаў ідзе шляхам хоста, а трафік не.
Запыт праз loopback да лакальнай заглушкі не з'яўляецца доказам таго, што верхні запыт выкарыстаў маршрут браўзера, як і паспяховая загрузка старонкі з кэша.
IPv6 патрабуе асобага сказа ў дызайне
Правілы вышэй ахопліваюць толькі IPv4. Калі патрабуецца тунэль IPv4 без прамога IPv6 з гэтага акаўнта, дадайце праверанае тэрмінальнае правіла, напрыклад ip -6 rule add priority 12101 uidrange 1500-1500 unreachable, потым праверце ранейшыя правілы IPv6 і выключэнні loopback, якія вы хочаце захаваць.
Блакаванне прамога IPv6 гэта не двухстэкавае тунэляванне; гэта мяжа. Называнне гэтага тунэляваннем заблытае наступнага чалавека, які чытае палітыку, і блытаніна выявіцца як зварот у падтрымку пра зламаны сайт IPv6.
Праверце на сапраўдным акаўнце, потым валодайце жыццёвым цыклам
Параўнайце запыты: ip -4 route get 198.51.100.25 uid 1500 супраць таго ж прызначэння са звычайным UID. Потым зрабіце дазволены запыт пад асобным акаўнтам і праверце адрас крыніцы, які бачыць далёкі бок. Прыярытэтны адрас крыніцы гэта не source NAT, і ён не пераадолее праграму, якая прывязвае нешта іншае. Калі абодва запыты вяртаюць адзін шлях, правіла робіць не тое, што вы думаеце.
Трымайце табліцу, правілы і тэрмін жыцця маршруту тунэлю ў аднаго ўладальніка, праверце перападключэнне і страту тунэлю, а пры вывадзе палітыкі выдаляйце толькі яе дакладныя запісы. Namespace па-ранейшаму даступны, калі асобныя інтэрфейсы і асобны стан гэта тое, што вам сапраўды патрэбна.