Cara menyediakan pemajuan port pada Linux
Pemajuan port ialah fungsi yang sangat penting dalam pelbagai aplikasi rangkaian. Ia membolehkan anda memajukan trafik luaran ke port tertentu pada rangkaian dalaman anda. Pada sistem Linux, fungsi pemajuan port dilaksanakan dengan menggunakan iptables dan sysctl. Artikel ini menerangkan cara menyediakan pemajuan port pada Linux dan menyediakan contoh kod yang sepadan.
Sebelum mula menyediakan pemajuan port, pertama sekali kita perlu menyemak sama ada parameter kernel membenarkan fungsi pemajuan. Dengan menjalankan arahan berikut, anda boleh melihat tetapan pemajuan sistem semasa:
sysctl net.ipv4.ip_forward
Jika hasil output ialah net.ipv4.ip_forward = 1
, ini bermakna fungsi pemajuan telah didayakan. Jika hasil output ialah net.ipv4.ip_forward = 0
, ini bermakna fungsi pemajuan tidak didayakan. Apabila fungsi pemajuan tidak dihidupkan, anda boleh menghidupkan fungsi pemajuan buat sementara waktu dengan menjalankan arahan berikut: 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
fail dan tambah atau Ubah suai parameter berikut: rrreee
Selepas pengubahsuaian, simpan fail dan jalankan arahan berikut untuk menjadikannya berkesan:rrreee
<external_port>
ialah port luaran, <internal_ip>
ialah alamat IP bagi pelayan dalaman, <internal_port>
ialah nombor port pelayan dalaman. Kedua-dua arahan ini akan memajukan trafik luaran ke pelayan dalaman. Jika anda mahu alamat IP sumber dikenal pasti dengan betul selepas trafik luaran dimajukan, anda boleh menambah arahan berikut: 🎜rrreee🎜di mana <external_interface>
ialah nama antara muka luaran, seperti eth0 . 🎜🎜B. Gunakan alat socat🎜🎜socat ialah alat rangkaian berkuasa yang boleh melakukan pelbagai sambungan rangkaian dan pemajuan. Berikut ialah contoh kod untuk menyediakan port forwarding melalui socat: 🎜rrreee🎜di mana <external_port>
ialah port luaran, <internal_ip>
ialah alamat IP bagi pelayan dalaman, <internal_port>
ialah nombor port pelayan dalaman. Perintah ini akan memajukan trafik luaran ke pelayan dalaman. 🎜/etc/rc.local
dan menambah kandungan berikut: 🎜rrreee🎜Perhatikan bahawa /path/to/socat
perlu digantikan dengan laluan alat socat sebenar. 🎜🎜Ringkasan🎜🎜Artikel ini menerangkan cara menyediakan pemajuan port pada sistem Linux, memberikan contoh kod menggunakan iptables dan alat socat. Dengan menyediakan pemajuan port, anda boleh memajukan trafik luaran secara fleksibel ke pelayan dalaman untuk mencapai pengimbangan beban, pemetaan port dan fungsi lain untuk aplikasi rangkaian. 🎜Atas ialah kandungan terperinci Bagaimana untuk menyediakan pemajuan port pada Linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!