ausgehende Portumleitung
-
Ich hoffe, dass ich mit meinem Problem im richtigen Forum bin. Da ich sonst immer mit MFC entwickle, versuche ich es zunächst auch erst mal damit.
Folgende Situation: ich habe ein Programm, welches auf einem Server mit Win2011 SBS läuft und über das Internet auf eine entfernte MS SQl-Datenbank zugreift. Dies geschieht über den Standardport 1433. Nun soll aus Sicherheitsgründen der Port gewechselt werden. Der Quellcode für mein Serverprogramm ist leider nicht verfügbar. Jetzt besteht die Idee, auf dem Server ein Programm laufen zu lassen, welches alle SQL-Anfragen des servereigenen Datenbankprogrammes auf einen anderen Port umleitet. Im Router kann man die Umleitung leider nur für eingehende Verbindungen vornehmen. Leider habe ich derzeit keie Idee, ob das geht und wenn ja, wie man da rangehen muss. Kann mir da jemand einen Tipp geben?
-
Was hat das mit MFC zu tun? Sollte man eher in einem Admin-Forum fragen, oder willst Du das jetzt programmieren?
-
Jochen Kalmbach schrieb:
Was hat das mit MFC zu tun? Sollte man eher in einem Admin-Forum fragen, oder willst Du das jetzt programmieren?
Ja ich will/soll das programmieren. Leider hab ich derzeit keine Idee wie ich das machen soll. Eventuell könnte man zwei Socket-Klassen nehmen. Die eine hört den Port 1433 ab, übergibt den Inhalt des Puffers an die andere und die sendet dann über einen anderen Port. Leider weiß ich eben nicht, ob das geht.
Das einfachste wäre einen Router zu nehmen, der das kann. Aber das ist nicht gewollt, warum auch immer...
-
Wo hast du denn Zugriff/was kannst du ändern?
Damit das über ein normales Programm funktioniert, müsstest du die IP umstellen zu der sich das Programm verbinden will (die IP des SQL Servers).
Ansonsten ... kannst du nicht den Connection-String für die Datenbank-Verbindung anpassen? Das würde nämlich ausreichen, da drinnen kann man den Port umstellen.Davon abgesehen würde ich hier eher vorschlagen einen VPN-Tunnel zu verwenden.
Denn wirklich sicher wird die Sache auch nicht nur weil man den Port ändert.
-
hustbaer schrieb:
Wo hast du denn Zugriff/was kannst du ändern?
Damit das über ein normales Programm funktioniert, müsstest du die IP umstellen zu der sich das Programm verbinden will (die IP des SQL Servers).
Ansonsten ... kannst du nicht den Connection-String für die Datenbank-Verbindung anpassen? Das würde nämlich ausreichen, da drinnen kann man den Port umstellen.Davon abgesehen würde ich hier eher vorschlagen einen VPN-Tunnel zu verwenden.
Denn wirklich sicher wird die Sache auch nicht nur weil man den Port ändert.Die IP des entfernten SQL-Servers habe ich. Die wird per dyndns bekannt gegeben. Mit dem Datenbankexplorer aus dem Visual Studio komme ich auch so drauf. Bei dem besagten Programm auf meinem Server (es handelt sich hier um einen Printservice, der offene Druckaufträge aus der Datenbank abholt und auf die lokalen Drucker ausgibt) klappt es esben nicht, dass man den Port mit einem Doppelpunkt hinter der IP-Adresse angibt.
-
Hast Du Einfluß auf den Connection String? Oder kannst Du nur den Servernamen angeben?
Aber eigentlich ist das doch mittlerweile komplett überflüssig. Seit SQL 2005 gibt es den SQL Server Brwoser Dienst. Der liefert doch bei den neuen Clients direkt Namen der instanz und korrekten Port.
Man muss am CLient doch gar nicht mehr den Port der Instanz wissen.
Welcher SQL Client wird denn verwendet?
-
Ach ja. Es gibt ja auch noch CLICONFG!
Ich war mir nicht sicher ob es das in den heutigen SQL Server Versinen noch gibt. Aber es existiert noch...Damit kannst Du einen Server Alias bauen und für diesen Alias einen anderen Port definieren. Evtl. solltest Du Dich etwas mehr mit dem MS-SQL Server ausseinandersetzen.
-
Martin Richter schrieb:
Hast Du Einfluß auf den Connection String? Oder kannst Du nur den Servernamen angeben?
Aber eigentlich ist das doch mittlerweile komplett überflüssig. Seit SQL 2005 gibt es den SQL Server Brwoser Dienst. Der liefert doch bei den neuen Clients direkt Namen der instanz und korrekten Port.
Man muss am CLient doch gar nicht mehr den Port der Instanz wissen.
Welcher SQL Client wird denn verwendet?Also, der Server, auf dem der MS SQL-Server 2008 läuft, hängt in einem Netz, dessen Router (der das Gateway darstellt) den Port 1433 von außen her blockt. Im Router ist eine NAT eingerichtet, die SQL-Serveranfragen von Port 50xx auf den 1433 umleitet. Auf meinem Server kann der Printservice nur auf Port 1433 was ausgeben. So gesehen habe ich was den Printservice angeht, keinen Einfluss. Ich müsste sicherstellen, dass alle ausgehenden Daten auf meinem Server von Port 1433 auf Port 50xx umgeleitet werden. Und dafür muss/soll ich eine Anwendung schreiben... Andere Lösungen sind mir natür lich auch willkommen....
-
Dann nimm
cliconfg
wie Martin vorgeschlagen hat!Command Prompt aufmachen,
cliconfg
, "Alias" Reiter, "Add" Button, Servername unter "Server alias" eingeben (den Dyndns Namen), auf TCP/IP umstellen, den selben Servernamen nochmal unter "Server name" eingeben, dann bei "Dynamically detect port" das Hakerl wegnehmen und bei "Port number" eben die 50xx eintragen.Ich kann dir nicht versprechen dass es geht, klingt aber vielversprechend, ich würde vorschlagen dass du das mal ausprobierst.
Aber nochmal: wo gibst du denn diesem Printer-Dings-Programm den Servernamen an? Wie sieht das genau aus? Vielleicht ist das ja schon ein Connection-String. Dort wird der Portname im übrigen nicht mit ":" abgetrennt sondern mit ",".
Also vielleicht einfach mal mit "Servername,Port
" statt nur "Servername
" versuchen.
-
hustbaer schrieb:
Dann nimm
cliconfg
wie Martin vorgeschlagen hat!Command Prompt aufmachen,
cliconfg
, "Alias" Reiter, "Add" Button, Servername unter "Server alias" eingeben (den Dyndns Namen), auf TCP/IP umstellen, den selben Servernamen nochmal unter "Server name" eingeben, dann bei "Dynamically detect port" das Hakerl wegnehmen und bei "Port number" eben die 50xx eintragen.Ich kann dir nicht versprechen dass es geht, klingt aber vielversprechend, ich würde vorschlagen dass du das mal ausprobierst.
Aber nochmal: wo gibst du denn diesem Printer-Dings-Programm den Servernamen an? Wie sieht das genau aus? Vielleicht ist das ja schon ein Connection-String. Dort wird der Portname im übrigen nicht mit ":" abgetrennt sondern mit ",".
Also vielleicht einfach mal mit "Servername,Port
" statt nur "Servername
" versuchen.Ich werde das mal versuchen, wenn ich wieder in der Firma bin. Ich kannte das Tool nicht. Es ist aber auf jeden Fall auch für den MS SQL-Server 2008 R2 verfügbar. Beim Abtrennen des Portnamens meinte ich nicht den Connection-String. Auf den haben ich, wie schon gesagt, keinen Zugriff. Das "Printer-Dings-Programm" ist eine grottenschlechte Entwicklung dialogbasierte unter C# und man hat einen Reiter für die Eintragungen des SQL-Servers. Beim Aufbau einer RDP-Verbindung kann man ja auch die IP-Adresse oder den Servernamen angeben und dann mit einem : den Port noch mitgeben. Das war damit gemeint. Bei anderen Tools dieses Herstellers funktioniert das nämlich.
Aber erst mal vielen Dank für den Ansatz. Wie wäre es aber programmiertechnisch unter C++ umzusetzen? :xmas1: