我在旧版局域网应用程序中使用 Firebird 1.0.3 ,其中包括必须通知数据库事件的部分(进程) ;它在Windows8上运行。
使用CurrPorts,我观察到在3050 / tcp上侦听的ibserver.exe以及与[SERVERIP]的一些已建立的连接:3050作为一个地址对。到目前为止这么好,我预料到了这种行为。我只能猜到,其他连接(模式[SERVER-P]:[端口X] - [CLIENT-IP]:[端口Y])如何建立。端口X和Y当然是动态端口。我想这对于每个事件通知行
...但我想清楚地了解它,因为我必须设置防火墙规则。
是否足以在服务器计算机上的应用程序级别启用Firebird(ibserver.exe
)?
(目前无法改变火鸟版本和整体架构。)
答案 0 :(得分:3)
默认情况下,Firebird会为事件使用随机端口。这对防火墙不起作用,因此Firebird还使用RemoteAuxPort
中的firebird.conf
设置提供使用固定端口的选项。 Firebird 1.5中添加了此选项,请参阅Firebird 1.5 release notes。从Firebird 1.0迁移到Firebird 1.5应该相对容易(迁移到更新版本,如Firebird 2.5可能会更多工作)。
有关详细信息,请参阅MilanBabuškov撰写的The Power of Firebird Events中的常见问题:防火墙部分:
客户端在其端口上与Firebird服务器有常规连接(默认为3050,但可以更改)。在注册事件时,它通过该连接发送请求。服务器在某个随机端口(例如4012)打开另一个连接,并将该端口号发送到客户端。然后客户端连接到该端口。
[...]
当客户端注册事件时,服务器会打开一个随机端口(例如6023)并将该信息发送给客户端。这就是问题变得明显的地方:客户端尝试连接到防火墙上的那个端口(6023)(因为它“将防火墙视为”服务器)。由于端口是完全随机的,因此防火墙上的端口肯定没有转发规则,因此连接被拒绝。使用此设置,没有办法使其工作,没有将所有流量(所有端口)转发到Firebird服务器,这是我们希望通过将防火墙置于前面而避免的确切事情。