Клиентски изходен порт срещу сървърен слушател във VPN поток
Сравнете двата номера на портове в един тунел: фиксирания слушател на сървъра и краткотрайния източник на клиента, и как транслацията на рутера стои между тях.
В един и същ разговор се появяват две числа и нито едно от тях не е грешно. Сървърният лог показва слушателя, който предлага услугата, лаптопът показва сокета, изпратил дейтаграмата, а рутер по средата може да пренапише второто по пътя навън. По-полезно е да сравним краищата на разговора, отколкото самите цифри. Сравнението по-долу държи слушателя, клиентския сокет и транслационния източник отделно, защото те отговарят на различни въпроси.
Две числа, описващи срещуположни краища
Конфигурираният порт на сървъра е дестинацията, към която клиентът се свързва. Той е фиксиран от политика, присъства в профила и трябва да е отворен от страна на сървъра. Изходният порт на клиента се избира локално, обикновено от ефимерния диапазон, и съществува, за да има къде да пристигне отговорът. Той може да се променя при всяко повторно свързване и нищо в дизайна не зависи от стабилността му.
Рутер по средата може да пренапише този източник в своя собствена 'NAT' транслация. Затова числото, наблюдавано на сървъра, често няма никаква връзка с това, което лаптопът е избрал.
Къде номерът на източника се променя по пътя навън
Вземете измислен пример с IPv4: клиент зад транслационен рутер, сървър с един 'UDP' слушател и една дейтаграма, пресичаща и двете. Таблицата именува всяка крайна точка и какво се случва с нея, вместо да преиграва пакета в три точки на наблюдение.
| Endpoint | What stays fixed | What changes on reconnect | Who owns it |
|---|---|---|---|
| Server listener | The service port and the address the profile names | Nothing; the listener does not follow the client | The server operator |
| Client socket | The destination it dials | The local source port, chosen per socket | The client, or its operating system |
| Translated source | Usually the public address of the router | The port, and sometimes the address after a network switch | The NAT device or the upstream carrier |
Дестинацията е постоянна във всеки ред и се променя само идентичността на източника. Изискванията на UDP NAT разграничават вътрешен адрес и порт от външната транслация, което е точно разликата между втория и третия ред. Рутерът може да запази изходния порт на клиента или да избере друг; запазването не е нещо, което приложението трябва да предполага.
Прочетете трите крайни точки от самите хостове
Списъците по-долу идват от три различни машини и заедно показват целия разговор. Изпълнете първия на сървъра, втория на клиента, а третия там, където съществува транслацията. Един ред в лог никога не показва и трите.
ss -lunp 'sport = :1194'
ss -unp | grep 1194
conntrack -L -p udp | grep 1194
Първият списък доказва, че сървърът е вързан към порта на услугата, и показва кой процес го притежава. Вторият показва локалния сокет на клиента и дестинацията, към която се е свързал. Третият показва транслацията, създадена от рутера, което е единственото място, където се появява транслационният източник. Прочетете ги в този ред и двете числа спират да изглеждат противоречиви.
Какво променя повторното свързване и какво не
Някои рутери запазват изходния порт на клиента, когато е свободен, а други отпускат различен всеки път. И двете поведения са нормални и приложение, което изисква първото, ще се счупи на второто. Промяната на транслацията след повторно свързване или смяна на мрежа не е сървърна повреда: клиентът отваря нов сокет, рутерът дава каквото има, а сървърът вижда нов източник на същия слушател. Повреда би било да очакваме сървърът да приема трафик, адресиран до произволен клиентски порт.
Общностните OpenVPN клиенти получават това поведение чрез nobind, което позволява на операционната система да избере локалния порт; отдалеченият порт все още идва от профила. Изричното свързване е съзнателен избор, а не изискване на протокола. Сървърът продължава да предлага една крайна точка, докато клиентите избират свои локални идентичности.
Обозначете слоевете поотделно в записа
Вътре в тунела има втори разговор със собствени портове. HTTPS заявка, пренасяна от тунела, има дестинация TCP 443, докато външната криптирана връзка използва UDP 1194, така че промяната на външния изходен порт не променя нищо във вътрешната услуга.
Дори на външния слой протоколът има значение. UDP 1194 и TCP 1194 са различни крайни точки и 'TCP' слушател никога няма да получи UDP дейтаграма, защото номерът съвпада. Когато документирате внедряване, обозначете сървърния слушател, клиентския сокет и транслационния източник като три различни неща и добавете транспорта към всяко.
После оставете политиката да следва ролите. Сървърът отваря предвидения транспорт на своя слушател и все още удостоверява партньора; защитната стена на клиента допуска отговори на собствения му изходящ обмен, без да публикува входяща услуга. Филтър без състояние се нуждае от изрично записана обратна посока и това е практическата причина разликата да има значение отвъд подредените диаграми.