Определение используемого IP-адреса клиента

Похоже, это проблема кэширования браузера. После того, как я закрыл вкладку браузера, открыл другую и заново зашел на сайт, я смог войти в систему.

Возможно, я полностью закрыл окно браузера. ---Я не заметил, что закрыл его между использованием разных вкладок. Кажется, я не закрыл окно браузера.

В любом случае я не обновлял страницу ни F5, ни CTRL+R, ни CTRL+F5 и т.п.

4
13.02.2021, 13:22
1 ответ

Когда какой-либо клиент пытается установить соединение, он может либо указать свой собственный IP-адрес клиента, либо использовать адресINADDR_ANY(AKA:0.0.0.0)в качестве исходного адреса. Если используется INADDR _ANY, тогда Linux автоматически выбирает адрес, когда клиент вызывает connect()-see man 7 ip .


Самое простое решение — сообщить клиенту, какой IP выбрать.

Поскольку вы смонтировали с помощью mount -t nfs..., вы можете просто установить clientaddrопцию (см. man 5 nfs). Если вам нужен IP-адрес 10.20.30.41, вы просто добавляете опцию с:

... -o clientaddr=10.20.30.41...`

Или, если у вас уже есть -o, просто разделите запятой другие варианты. Изменить

... -o foo=bar
с

по

... -o foo=bar,clientaddr=10.20.30.41

Если вы не можете остановить свой клиент с помощью INADDR _ANY , тогда...

Из того, что я прочитал, исходный адрес задается адресом srcв таблице маршрутизации. См. man 8 ip route

Таким образом, Linux проверяет удаленный (NAS )IP-адрес, к которому вы пытаетесь подключиться, а затем ищет адрес в своей таблице маршрутизации. Он выбирает указанный там адрес src.

В терминале вы можете просмотреть таблицу маршрутизации с помощью ip routeи получить что-то вроде этого:

default via 192.168.1.254 dev wlan0 proto dhcp src 192.168.1.143 metric 600 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 
172.19.0.0/16 dev br-ff4f53a0f3b5 proto kernel scope link src 172.19.0.1 
172.22.0.0/16 dev br-66358811b693 proto kernel scope link src 172.22.0.1 linkdown 
172.29.0.0/16 dev br-ce3d9cbbad0b proto kernel scope link src 172.29.0.1 linkdown 
192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.143 
192.168.1.254 dev wlan0 proto dhcp scope link src 192.168.1.143 metric 600 

Здесь вы можете видеть, что если вы попытаетесь подключиться к чему-либо, 172.17.x.xLinux выберет 172.17.0.1в качестве исходного адреса. Точно так же все в общедоступном Интернете будет проходить по «маршруту по умолчанию», поэтому будет выбран 192.168.1.143.

Вы можете изменить таблицу маршрутизации с помощью ip route add..., ip route change...и ip route del....

Я бы посоветовал вам внести минимальное изменение в таблицу маршрутизации, чтобы избежать других проблем. Вы создаете маршрут для одного IP-адреса, и он будет иметь приоритет над маршрутом для всей подсети. Например, если локальная сеть 10.20.30.0/24, вторичный IP-адрес системы 10.20.30.22 также на интерфейсе eth0 , а NAS также в этой локальной сети использует 10.20.30.31 :

.
ip route add 10.20.30.31/32 dev eth0 src 10.20.30.22

или если NAS находится в другой сети с адресом 172.20.30.31, доступным через шлюз 10.20.30.1:

ip route add 172.20.30.31/32 via 10.20.30.1 src 10.20.30.22

Предупреждение. :У меня не было возможности проверить вышеуказанное.

4
18.03.2021, 22:30

Теги

Похожие вопросы