How do I specify a linked server to a remote database over tcp/ip?
I don't see a reason why you should be using a DSN. Create the linked server using the SQL Server Native Client directly:
EXEC master.dbo.sp_addlinkedserver
@server = N'MAIN',
@srvproduct = N'SQLServ', -- it’s not a typo: it can’t be “SQLServer”
@provider = N'SQLNCLI',
@datasrc = N'I .P_Address';
Then you can create the local/remote login pairs:
-- Pair local and remote logins
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname = N'MAIN',
@useself = N'False',
@locallogin = N'Local_user_name',
@rmtuser = N'Remote_user_name',
@rmtpassword = N'Remote_password';v