<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Openvpn on SAM's Blog</title><link>https://neter.pages.dev/tags/openvpn/</link><description>Recent content in Openvpn on SAM's Blog</description><generator>Hugo -- 0.125.4</generator><language>zh</language><lastBuildDate>Sun, 30 Aug 2026 15:59:36 +0800</lastBuildDate><atom:link href="https://neter.pages.dev/tags/openvpn/index.xml" rel="self" type="application/rss+xml"/><item><title>使用openvpn搭建中国服务器</title><link>https://neter.pages.dev/posts/tech/openvpn-china-server/</link><pubDate>Sun, 30 Aug 2026 15:59:36 +0800</pubDate><guid>https://neter.pages.dev/posts/tech/openvpn-china-server/</guid><description>openvpn搭建中国服务器，手机使用openvpn connect连接到服务器</description><content:encoded><![CDATA[<h3 id="第一步创建并编辑脚本文件">第一步：创建并编辑脚本文件</h3>
<p>在 Ubuntu 终端中执行以下命令，创建一个名为 setup_vpn.sh 的文件：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">nano setup_vpn.sh
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="第二步复制完整脚本代码">第二步：复制完整脚本代码</h3>
<p>在打开的编辑器中，粘贴以下<em><strong>全自动脚本代码</strong></em>（代码中已自动处理交互确认，无需手动按回车或输入 <code>yes</code>）：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">  1
</span><span class="lnt">  2
</span><span class="lnt">  3
</span><span class="lnt">  4
</span><span class="lnt">  5
</span><span class="lnt">  6
</span><span class="lnt">  7
</span><span class="lnt">  8
</span><span class="lnt">  9
</span><span class="lnt"> 10
</span><span class="lnt"> 11
</span><span class="lnt"> 12
</span><span class="lnt"> 13
</span><span class="lnt"> 14
</span><span class="lnt"> 15
</span><span class="lnt"> 16
</span><span class="lnt"> 17
</span><span class="lnt"> 18
</span><span class="lnt"> 19
</span><span class="lnt"> 20
</span><span class="lnt"> 21
</span><span class="lnt"> 22
</span><span class="lnt"> 23
</span><span class="lnt"> 24
</span><span class="lnt"> 25
</span><span class="lnt"> 26
</span><span class="lnt"> 27
</span><span class="lnt"> 28
</span><span class="lnt"> 29
</span><span class="lnt"> 30
</span><span class="lnt"> 31
</span><span class="lnt"> 32
</span><span class="lnt"> 33
</span><span class="lnt"> 34
</span><span class="lnt"> 35
</span><span class="lnt"> 36
</span><span class="lnt"> 37
</span><span class="lnt"> 38
</span><span class="lnt"> 39
</span><span class="lnt"> 40
</span><span class="lnt"> 41
</span><span class="lnt"> 42
</span><span class="lnt"> 43
</span><span class="lnt"> 44
</span><span class="lnt"> 45
</span><span class="lnt"> 46
</span><span class="lnt"> 47
</span><span class="lnt"> 48
</span><span class="lnt"> 49
</span><span class="lnt"> 50
</span><span class="lnt"> 51
</span><span class="lnt"> 52
</span><span class="lnt"> 53
</span><span class="lnt"> 54
</span><span class="lnt"> 55
</span><span class="lnt"> 56
</span><span class="lnt"> 57
</span><span class="lnt"> 58
</span><span class="lnt"> 59
</span><span class="lnt"> 60
</span><span class="lnt"> 61
</span><span class="lnt"> 62
</span><span class="lnt"> 63
</span><span class="lnt"> 64
</span><span class="lnt"> 65
</span><span class="lnt"> 66
</span><span class="lnt"> 67
</span><span class="lnt"> 68
</span><span class="lnt"> 69
</span><span class="lnt"> 70
</span><span class="lnt"> 71
</span><span class="lnt"> 72
</span><span class="lnt"> 73
</span><span class="lnt"> 74
</span><span class="lnt"> 75
</span><span class="lnt"> 76
</span><span class="lnt"> 77
</span><span class="lnt"> 78
</span><span class="lnt"> 79
</span><span class="lnt"> 80
</span><span class="lnt"> 81
</span><span class="lnt"> 82
</span><span class="lnt"> 83
</span><span class="lnt"> 84
</span><span class="lnt"> 85
</span><span class="lnt"> 86
</span><span class="lnt"> 87
</span><span class="lnt"> 88
</span><span class="lnt"> 89
</span><span class="lnt"> 90
</span><span class="lnt"> 91
</span><span class="lnt"> 92
</span><span class="lnt"> 93
</span><span class="lnt"> 94
</span><span class="lnt"> 95
</span><span class="lnt"> 96
</span><span class="lnt"> 97
</span><span class="lnt"> 98
</span><span class="lnt"> 99
</span><span class="lnt">100
</span><span class="lnt">101
</span><span class="lnt">102
</span><span class="lnt">103
</span><span class="lnt">104
</span><span class="lnt">105
</span><span class="lnt">106
</span><span class="lnt">107
</span><span class="lnt">108
</span><span class="lnt">109
</span><span class="lnt">110
</span><span class="lnt">111
</span><span class="lnt">112
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="cp">#!/bin/bash
</span></span></span><span class="line"><span class="cl"><span class="cp"></span><span class="nb">set</span> -e
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;=== 1. 更新软件源并安装 OpenVPN ===&#34;</span>
</span></span><span class="line"><span class="cl">sudo apt update
</span></span><span class="line"><span class="cl">sudo apt install -y openvpn easy-rsa iptables curl
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;=== 2. 配置 PKI 并生成证书 ===&#34;</span>
</span></span><span class="line"><span class="cl">rm -rf ~/openvpn-ca
</span></span><span class="line"><span class="cl">make-cadir ~/openvpn-ca
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> ~/openvpn-ca
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 初始化 PKI 并自动签发 CA</span>
</span></span><span class="line"><span class="cl">./easyrsa init-pki
</span></span><span class="line"><span class="cl">./easyrsa --batch build-ca nopass
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 生成并自动签发服务端证书</span>
</span></span><span class="line"><span class="cl">./easyrsa --batch gen-req server nopass
</span></span><span class="line"><span class="cl">./easyrsa --batch sign-req server server
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 生成 Diffie-Hellman 参数和 TLS 密钥</span>
</span></span><span class="line"><span class="cl">./easyrsa gen-dh
</span></span><span class="line"><span class="cl">openvpn --genkey secret ta.key
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 复制证书到 OpenVPN 目录</span>
</span></span><span class="line"><span class="cl">sudo cp pki/ca.crt pki/issued/server.crt pki/private/server.key pki/dh.pem ta.key /etc/openvpn/server/
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;=== 3. 写入服务端配置文件 ===&#34;</span>
</span></span><span class="line"><span class="cl">sudo bash -c <span class="s1">&#39;cat &lt;&lt;EOF &gt; /etc/openvpn/server/server.conf
</span></span></span><span class="line"><span class="cl"><span class="s1">port 1194
</span></span></span><span class="line"><span class="cl"><span class="s1">proto udp
</span></span></span><span class="line"><span class="cl"><span class="s1">dev tun
</span></span></span><span class="line"><span class="cl"><span class="s1">ca /etc/openvpn/server/ca.crt
</span></span></span><span class="line"><span class="cl"><span class="s1">cert /etc/openvpn/server/server.crt
</span></span></span><span class="line"><span class="cl"><span class="s1">key /etc/openvpn/server/server.key
</span></span></span><span class="line"><span class="cl"><span class="s1">dh /etc/openvpn/server/dh.pem
</span></span></span><span class="line"><span class="cl"><span class="s1">tls-auth /etc/openvpn/server/ta.key 0
</span></span></span><span class="line"><span class="cl"><span class="s1">server 10.8.0.0 255.255.255.0
</span></span></span><span class="line"><span class="cl"><span class="s1">ifconfig-pool-persist ipp.txt
</span></span></span><span class="line"><span class="cl"><span class="s1">push &#34;redirect-gateway def1 bypass-dhcp&#34;
</span></span></span><span class="line"><span class="cl"><span class="s1">push &#34;dhcp-option DNS 223.5.5.5&#34;
</span></span></span><span class="line"><span class="cl"><span class="s1">push &#34;dhcp-option DNS 119.29.29.29&#34;
</span></span></span><span class="line"><span class="cl"><span class="s1">keepalive 10 120
</span></span></span><span class="line"><span class="cl"><span class="s1">cipher AES-256-GCM
</span></span></span><span class="line"><span class="cl"><span class="s1">auth SHA256
</span></span></span><span class="line"><span class="cl"><span class="s1">user nobody
</span></span></span><span class="line"><span class="cl"><span class="s1">group nogroup
</span></span></span><span class="line"><span class="cl"><span class="s1">persist-key
</span></span></span><span class="line"><span class="cl"><span class="s1">persist-tun
</span></span></span><span class="line"><span class="cl"><span class="s1">status openvpn-status.log
</span></span></span><span class="line"><span class="cl"><span class="s1">verb 3
</span></span></span><span class="line"><span class="cl"><span class="s1">EOF&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;=== 4. 配置网络与防火墙路由 ===&#34;</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 开启 IPv4 转发</span>
</span></span><span class="line"><span class="cl">grep -qF <span class="s1">&#39;net.ipv4.ip_forward = 1&#39;</span> /etc/sysctl.conf <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;net.ipv4.ip_forward = 1&#34;</span> <span class="p">|</span> sudo tee -a /etc/sysctl.conf
</span></span><span class="line"><span class="cl">sudo sysctl -p
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 获取网卡名称并配置 NAT</span>
</span></span><span class="line"><span class="cl"><span class="nv">NIC</span><span class="o">=</span><span class="k">$(</span>ip route get 8.8.8.8 <span class="p">|</span> awk <span class="s1">&#39;{print $5; exit}&#39;</span><span class="k">)</span>
</span></span><span class="line"><span class="cl">sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o <span class="nv">$NIC</span> -j MASQUERADE
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 如果开了 ufw 防火墙则放行端口</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="nb">command</span> -v ufw &gt; /dev/null<span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">    sudo ufw allow 1194/udp
</span></span><span class="line"><span class="cl"><span class="k">fi</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;=== 5. 生成客户端证书与 phone.ovpn 配置文件 ===&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> ~/openvpn-ca
</span></span><span class="line"><span class="cl">./easyrsa --batch gen-req phone nopass
</span></span><span class="line"><span class="cl">./easyrsa --batch sign-req client phone
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">PUBLIC_IP</span><span class="o">=</span><span class="k">$(</span>curl -s ifconfig.me<span class="k">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">cat <span class="s">&lt;&lt;EOF &gt; ~/phone.ovpn
</span></span></span><span class="line"><span class="cl"><span class="s">client
</span></span></span><span class="line"><span class="cl"><span class="s">dev tun
</span></span></span><span class="line"><span class="cl"><span class="s">proto udp
</span></span></span><span class="line"><span class="cl"><span class="s">remote $PUBLIC_IP 1194
</span></span></span><span class="line"><span class="cl"><span class="s">resolv-retry infinite
</span></span></span><span class="line"><span class="cl"><span class="s">nobind
</span></span></span><span class="line"><span class="cl"><span class="s">persist-key
</span></span></span><span class="line"><span class="cl"><span class="s">persist-tun
</span></span></span><span class="line"><span class="cl"><span class="s">remote-cert-tls server
</span></span></span><span class="line"><span class="cl"><span class="s">cipher AES-256-GCM
</span></span></span><span class="line"><span class="cl"><span class="s">auth SHA256
</span></span></span><span class="line"><span class="cl"><span class="s">key-direction 1
</span></span></span><span class="line"><span class="cl"><span class="s">&lt;ca&gt;
</span></span></span><span class="line"><span class="cl"><span class="s">$(cat pki/ca.crt)
</span></span></span><span class="line"><span class="cl"><span class="s">&lt;/ca&gt;
</span></span></span><span class="line"><span class="cl"><span class="s">&lt;cert&gt;
</span></span></span><span class="line"><span class="cl"><span class="s">$(cat pki/issued/phone.crt)
</span></span></span><span class="line"><span class="cl"><span class="s">&lt;/cert&gt;
</span></span></span><span class="line"><span class="cl"><span class="s">&lt;key&gt;
</span></span></span><span class="line"><span class="cl"><span class="s">$(cat pki/private/phone.key)
</span></span></span><span class="line"><span class="cl"><span class="s">&lt;/key&gt;
</span></span></span><span class="line"><span class="cl"><span class="s">&lt;tls-auth&gt;
</span></span></span><span class="line"><span class="cl"><span class="s">$(cat ta.key)
</span></span></span><span class="line"><span class="cl"><span class="s">&lt;/tls-auth&gt;
</span></span></span><span class="line"><span class="cl"><span class="s">EOF</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;=== 6. 启动 OpenVPN 服务 ===&#34;</span>
</span></span><span class="line"><span class="cl">sudo systemctl restart openvpn-server@server
</span></span><span class="line"><span class="cl">sudo systemctl <span class="nb">enable</span> openvpn-server@server
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;==================================================&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34; OpenVPN 服务端安装完成！&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34; 客户端配置文件已保存在: ~/phone.ovpn&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34; 服务器外网 IP 为: </span><span class="nv">$PUBLIC_IP</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34; 注意：请务必在云服务器控制台安全组中放行 UDP 1194 端口！&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;==================================================&#34;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><em><strong>保存退出方法：</strong></em></p>
<ul>
<li>
<p>按 <code>Ctrl + O</code>，然后按 <code>Enter</code>（保存）</p>
</li>
<li>
<p>按 <code>Ctrl + X</code>（退出编辑器）</p>
</li>
</ul>
<h3 id="第三步给脚本赋予执行权限">第三步：给脚本赋予执行权限</h3>
<p>在终端中运行：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">chmod +x setup_vpn.sh
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="第四步一键运行脚本">第四步：一键运行脚本</h3>
<p>执行以下命令开始搭建：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">./setup_vpn.sh
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="手机端连接方式">手机端连接方式：</h3>
<p>将生成在主目录下的 <code>~/phone.ovpn</code> 文件传输到手机（通过 SCP、微信文件传输助手或 FTP）。</p>
<p>手机下载安装 <code>OpenVPN Connect App</code>。</p>
<p>在 <code>App</code> 中选择 <code>Import Profile -&gt; File</code>，导入 <code>phone.ovpn</code> 即可一键开启连接。</p>
]]></content:encoded></item></channel></rss>