Comment configurer la redirection de port sous Linux
La redirection de port est une fonction très importante dans diverses applications réseau. Il vous permet de transférer le trafic externe vers des ports spécifiques de votre réseau interne. Sur les systèmes Linux, la fonction de redirection de port est implémentée à l'aide de iptables et sysctl. Cet article explique comment configurer la redirection de port sous Linux et fournit des exemples de code correspondants.
Avant de commencer à configurer la redirection de port, nous devons d'abord vérifier si les paramètres du noyau autorisent la fonction de redirection. En exécutant la commande suivante, vous pouvez afficher les paramètres de transfert du système actuel :
sysctl net.ipv4.ip_forward
Si le résultat de sortie est net.ipv4.ip_forward = 1
, cela signifie que la fonction de transfert a été activée. Si le résultat de sortie est net.ipv4.ip_forward = 0
, cela signifie que la fonction de transfert n'est pas activée. Lorsque la fonction de transfert n'est pas activée, vous pouvez activer temporairement la fonction de transfert en exécutant la commande suivante : net.ipv4.ip_forward = 1
,说明转发功能已经开启。如果输出结果为net.ipv4.ip_forward = 0
,则表示转发功能未开启。在转发功能未开启的情况下,可以通过运行以下命令来临时开启转发功能:
sysctl -w net.ipv4.ip_forward=1
如果需要永久开启转发功能,可以编辑/etc/sysctl.conf
文件,并添加或修改以下参数:
net.ipv4.ip_forward=1
修改完毕后,保存文件并运行以下命令使其生效:
sysctl -p
实现端口转发的方式有很多种,下面我们将介绍两种常用的方式:使用iptables和使用socat工具。
A. 使用iptables
iptables是Linux系统上常用的防火墙工具,我们可以使用它来设置端口转发。以下是通过iptables设置端口转发的示例代码:
iptables -t nat -A PREROUTING -p tcp --dport <external_port> -j DNAT --to-destination <internal_ip>:<internal_port> iptables -t nat -A POSTROUTING -j MASQUERADE
其中<external_port>
是外部端口,<internal_ip>
是内部服务器的IP地址,<internal_port>
是内部服务器的端口号。这两条命令将会将外部流量转发到内部服务器上。如果希望外部流量经过转发后仍然能够正确识别源IP地址,可以添加以下命令:
iptables -t nat -A POSTROUTING -o <external_interface> -j MASQUERADE
其中<external_interface>
是外部接口的名称,比如eth0
。
B. 使用socat工具
socat是一款强大的网络工具,可以进行各种网络连接和转发。以下是通过socat设置端口转发的示例代码:
socat TCP-LISTEN:<external_port>,fork TCP:<internal_ip>:<internal_port>
其中<external_port>
是外部端口,<internal_ip>
是内部服务器的IP地址,<internal_port>
是内部服务器的端口号。这条命令将会将外部流量转发到内部服务器上。
无论是使用iptables还是socat工具,设置的转发规则都只在当前会话中有效。如果希望在系统重启后依然有效,需要将这些规则应用到系统中。
A. 使用iptables
通过运行以下命令可以将iptables规则应用到系统中:
iptables-save > /etc/sysconfig/iptables
B. 使用socat工具
socat工具默认在后台运行,如果希望socat规则在系统重启后依然有效,可以将socat配置加入到系统启动脚本中。例如,在Ubuntu系统上可以编辑/etc/rc.local
文件并添加以下内容:
/path/to/socat TCP-LISTEN:<external_port>,fork TCP:<internal_ip>:<internal_port> &
注意,/path/to/socat
rrreee
/etc/sysctl.conf
et ajoutez ou modifiez les paramètres suivants : rrreee
Après modification, enregistrez le fichier et exécutez la commande suivante pour le rendre effectif :rrreee
<external_port>
est le port externe, <internal_ip>
est l'adresse IP de le serveur interne, <internal_port>
est le numéro de port du serveur interne. Ces deux commandes transmettront le trafic externe vers le serveur interne. Si vous souhaitez que l'adresse IP source soit correctement identifiée après le transfert du trafic externe, vous pouvez ajouter la commande suivante : 🎜rrreee🎜où <external_interface>
est le nom de l'interface externe, tel que eth0 . 🎜🎜B. Utilisez l'outil socat🎜🎜socat est un outil réseau puissant qui peut effectuer diverses connexions réseau et transferts. Voici un exemple de code pour configurer la redirection de port via socat : 🎜rrreee🎜où <external_port>
est le port externe, <internal_ip>
est l'adresse IP de le serveur interne, <internal_port>
est le numéro de port du serveur interne. Cette commande transmettra le trafic externe vers le serveur interne. 🎜/etc/rc.local
et ajouter le contenu suivant : 🎜rrreee🎜Notez que /path/to/socat
doit être remplacé par le chemin d'outil socat réel. 🎜🎜Résumé🎜🎜Cet article décrit comment configurer la redirection de port sur un système Linux, en fournissant des exemples de code utilisant les outils iptables et socat. En configurant la redirection de port, vous pouvez transférer de manière flexible le trafic externe vers des serveurs internes pour réaliser l'équilibrage de charge, le mappage de ports et d'autres fonctions pour les applications réseau. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!