How to change server IP address in Session Subsystem NULL?

Currently, I’m developing and testing my game (client - listen server, no dedicated server) using Online Session Subsystem NULL as a Session Subsystem, and now I started to show my game to friends. Because OSS NULL can handles only LAN matches, we created a VPN between out computers, and it’s partially worked: we managed to play several games. The problem is, my friends are able to connect only via console “Open direct_ip_address_in_VPN” command, because trying to connect using in-game matchmaking system, they just returns to menu with “Connection timeout” error. When I tested my game locally (two computers in same network), it works perfectly.
After some researches I found reason: then session creates, it passes physical IP of my computer as a IP address to connect instead of VPN IP, which is, of course, unaccessible outside. Because the game isn’t in suitable condition to add some more advanced system such as Steam or EOS, I decided to add an advanced game setting “Override IP address”, where I can set required IP for player connections (It works and I can check if it’s valid IP or not, so it can be only valid IP or empty string).
I created almost anything what I need to implement it, except IP overriding in session settings.
What I want: after client connects to session, it calls UGameplayStatics::OpenLevel(GetWorld(), FName(ConnectString), true);, where ConnectString - connection address from IOnlineSessionPtr::GetResolvedConnectString(NAME_GameSession, ConnectString). Usually, ConnectString is my computer’s physical IP, but I want to change it to IP address from “Override IP address” setting if set (some valid IP address) and don’t change anything (use physical IP) if “Override IP address” not set (empty string or invalid IP). Do you have any suggestions how to make it?
Just in case, this is my session creation code:

void USessionSubsystem::CreateSession(int32 NumPublicConnections, bool IsLANMatch) {
	IOnlineSessionPtr inter = Online::GetSessionInterface(GetWorld());
	if (!inter.IsValid()) {
		OnCreateSessionCompleteEvent.Broadcast(false);
		return;
	}
	LastSessionSettings = MakeShareable(new FOnlineSessionSettings());
	LastSessionSettings->NumPrivateConnections = 0;
	LastSessionSettings->NumPublicConnections = NumPublicConnections;
	LastSessionSettings->bAllowInvites = true;
	LastSessionSettings->bAllowJoinInProgress = false;
	LastSessionSettings->bAllowJoinViaPresence = true;
	LastSessionSettings->bAllowJoinViaPresenceFriendsOnly = true;
	LastSessionSettings->bIsDedicated = false;
	LastSessionSettings->bUsesPresence = true;
	LastSessionSettings->bIsLANMatch = IsLANMatch;
	LastSessionSettings->bShouldAdvertise = true;
	LastSessionSettings->Set(SETTING_MAPNAME, FString("Lobby"), EOnlineDataAdvertisementType::ViaOnlineService);
	LastSessionSettings->Set(SETTING_NEEDS, FString().FromInt(10), EOnlineDataAdvertisementType::ViaOnlineService);
	CreateSessionCompleteDelegateHandle = inter->AddOnCreateSessionCompleteDelegate_Handle(CreateSessionCompleteDelegate);
	const ULocalPlayer* LocalPlayer = GetWorld()->GetFirstLocalPlayerFromController();
	if (!inter->CreateSession(*LocalPlayer->GetPreferredUniqueNetId(), NAME_GameSession, *LastSessionSettings)) {
		inter->ClearOnCreateSessionCompleteDelegate_Handle(CreateSessionCompleteDelegateHandle);
		OnCreateSessionCompleteEvent.Broadcast(false);
	}
}

And client travel to server:

bool USessionSubsystem::TryTravelToCurrentSession(){
	IOnlineSessionPtr inter = Online::GetSessionInterface(GetWorld());
	if (!inter.IsValid()){
		return false;
	}
	FString ConnectString;
	if (!inter->GetResolvedConnectString(NAME_GameSession, ConnectString)){
		return false;
	}
	UGameplayStatics::OpenLevel(GetWorld(), FName(ConnectString), true);
	return true;
}