<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Socat on 吾爱主机</title><link>https://blog.waihost.com/tags/socat/</link><description>Recent content in Socat on 吾爱主机</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Fri, 08 Mar 2024 19:49:00 +0800</lastBuildDate><atom:link href="https://blog.waihost.com/tags/socat/index.xml" rel="self" type="application/rss+xml"/><item><title>iptables/socat转发ip的方式</title><link>https://blog.waihost.com/posts/iptables-socat-ip-forward/</link><pubDate>Fri, 08 Mar 2024 19:49:00 +0800</pubDate><guid>https://blog.waihost.com/posts/iptables-socat-ip-forward/</guid><description>&lt;img src="https://blog.waihost.com/images/covers/iptables-socat-ip-forward.svg" alt="Featured image of post iptables/socat转发ip的方式" /&gt;&lt;h3 id="方法-1使用-iptables推荐"&gt;&lt;a href="#%e6%96%b9%e6%b3%95-1%e4%bd%bf%e7%94%a8-iptables%e6%8e%a8%e8%8d%90" class="header-anchor"&gt;&lt;/a&gt;方法 1：使用 iptables（推荐）
&lt;/h3&gt;&lt;h4 id="步骤"&gt;&lt;a href="#%e6%ad%a5%e9%aa%a4" class="header-anchor"&gt;&lt;/a&gt;步骤：
&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;在 VPS B 上启用 IP 转发&lt;/strong&gt;&lt;br&gt;
编辑 &lt;code&gt;/etc/sysctl.conf&lt;/code&gt;，取消以下行的注释：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;net.ipv4.ip_forward = 1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后应用配置：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sysctl -p
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;配置 iptables 转发规则&lt;/strong&gt;&lt;br&gt;
执行以下命令（替换 &lt;code&gt;B_PORT&lt;/code&gt; 和 &lt;code&gt;A_IP:A_PORT&lt;/code&gt;）：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;iptables -t nat -A PREROUTING -p tcp --dport B_PORT -j DNAT --to-destination A_IP:A_PORT
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;iptables -t nat -A POSTROUTING -j MASQUERADE
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;保存 iptables 规则（防止重启丢失）&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 对于 Ubuntu/Debian：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt install iptables-persistent -y &amp;amp;&amp;amp; iptables-save &amp;gt; /etc/iptables/rules.v4
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 对于 CentOS/RHEL：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;service iptables save
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;开放防火墙端口&lt;/strong&gt;&lt;br&gt;
如果 VPS B 启用了防火墙（如 &lt;code&gt;ufw&lt;/code&gt; 或 &lt;code&gt;firewalld&lt;/code&gt;），确保放行端口：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# ufw 示例：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ufw allow B_PORT/tcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3 id="方法-2使用-socat快速临时方案"&gt;&lt;a href="#%e6%96%b9%e6%b3%95-2%e4%bd%bf%e7%94%a8-socat%e5%bf%ab%e9%80%9f%e4%b8%b4%e6%97%b6%e6%96%b9%e6%a1%88" class="header-anchor"&gt;&lt;/a&gt;方法 2：使用 socat（快速临时方案）
&lt;/h3&gt;&lt;h4 id="步骤-1"&gt;&lt;a href="#%e6%ad%a5%e9%aa%a4-1" class="header-anchor"&gt;&lt;/a&gt;步骤：
&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;在 VPS B 上安装 socat&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# Ubuntu/Debian：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt install socat -y
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# CentOS/RHEL：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;yum install socat -y
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;运行转发命令&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;socat TCP-LISTEN:B_PORT,fork,reuseaddr TCP:A_IP:A_PORT
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;若要后台运行，添加 &lt;code&gt;&amp;amp;&lt;/code&gt; 或使用 &lt;code&gt;nohup&lt;/code&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nohup socat TCP-LISTEN:B_PORT,fork,reuseaddr TCP:A_IP:A_PORT &amp;amp;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3 id="验证转发是否成功"&gt;&lt;a href="#%e9%aa%8c%e8%af%81%e8%bd%ac%e5%8f%91%e6%98%af%e5%90%a6%e6%88%90%e5%8a%9f" class="header-anchor"&gt;&lt;/a&gt;验证转发是否成功
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;在 VPS A 上启动服务&lt;/strong&gt;&lt;br&gt;
确保 A 的端口 &lt;code&gt;A_PORT&lt;/code&gt; 有服务监听（如 &lt;code&gt;nc -l A_PORT&lt;/code&gt; 或运行实际应用）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;从外部测试连接&lt;/strong&gt;&lt;br&gt;
访问 &lt;code&gt;VPS_B_IP:B_PORT&lt;/code&gt;，观察是否能连接到 VPS A 的服务：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;telnet VPS_B_IP B_PORT
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 或
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl http://VPS_B_IP:B_PORT
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3 id="注意事项"&gt;&lt;a href="#%e6%b3%a8%e6%84%8f%e4%ba%8b%e9%a1%b9" class="header-anchor"&gt;&lt;/a&gt;注意事项
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;协议支持&lt;/strong&gt;：上述命令默认转发 TCP 流量。如需 UDP，将 &lt;code&gt;-p tcp&lt;/code&gt; 改为 &lt;code&gt;-p udp&lt;/code&gt;（iptables）或使用 &lt;code&gt;UDP-LISTEN&lt;/code&gt;（socat）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;持久化&lt;/strong&gt;：使用 &lt;code&gt;iptables&lt;/code&gt; 方法需保存规则，而 &lt;code&gt;socat&lt;/code&gt; 需通过 &lt;code&gt;systemd&lt;/code&gt; 或 &lt;code&gt;supervisor&lt;/code&gt; 设置开机启动。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;防火墙&lt;/strong&gt;：确保 VPS B 的云服务商控制台（如 AWS 安全组）也放行了 &lt;code&gt;B_PORT&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果需要更稳定的方案，还可以考虑使用 &lt;strong&gt;WireGuard&lt;/strong&gt; 或 &lt;strong&gt;SSH 隧道&lt;/strong&gt; 建立加密转发。例如 SSH 隧道：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 在 VPS B 上执行：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh -N -L 0.0.0.0:B_PORT:A_IP:A_PORT user@A_IP
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item></channel></rss>