以前在学校里用的是移动网,每人都有公网ip(真是美滋滋)。现在换了电信网后反而只能得到一个内网ip了,比如我现在的网络中除了我自己的路由器,外面还夹着两个路由,过了这两个路由才是电信的路由,然后才到外网∠( ᐛ 」∠)_ 。这种状况想要正常地获得 eMule 的 HighID 实在困难。另外 easyMule 貌似是有 lowID 互相通讯的打洞功能,但是 easyMule 名声不好不想用。。正好手头也有 vps,于是准备用它来作映射。
这里介绍使用 vpn 来中继的方案。其实一开始我是准备用 frp 的,然而配置完后发觉并没有卵用,因为别人获取到你的 ip 仍然是电信的公网 ip,而不是你的 vps 的 ip,所以就换成 vpn 来。
vps 系统为 Centos 6 x86, 目前的 OpenVPN 版本为 2.4.4。
配置服务器
1、安装 openvpn easy-rsa
使用命令
1 | yum install openvpn easy-rsa -y |
安装 OpenVPN 和 easy-rsa。
2、配置 server.conf
复制模板配置
1 | cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn |
启用数据包转发(去掉注释)
1 | push "redirect-gateway def1 bypass-dhcp" |
修改 dns(查找DNS并修改)
1 | push "dhcp-option DNS 8.8.8.8" |
2 | push "dhcp-option DNS 8.8.4.4" |
修改权限(去掉注释)
1 | user nobody |
2 | group nobody |
3、生成证书
创建目录用于存放生成的证书
1 | mkdir -p /etc/openvpn/easy-rsa/keys |
复制 easy-rsa/2.0 目录下所有文件到 openvpn 目录
1 | cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa |
打开 /etc/openvpn/easy-rsa/vars 文件并按需要修改其中的默认配置
1 | export KEY_COUNTRY="US" |
2 | export KEY_PROVINCE="NY" |
3 | export KEY_CITY="New York" |
4 | export KEY_ORG="DigitalOcean" |
5 | export KEY_EMAIL="sammy@example.com" |
6 | export KEY_OU="Community" |
7 | export KEY_NAME="server" // 这个名称在生成证书时会用到 |
8 | export KEY_CN=openvpn.example.com |
生成证书,按顺序逐个执行命令
1 | cd /etc/openvpn/easy-rsa |
2 | source ./vars // 初始化环境变量 |
3 | ./clean-all // 清除原有证书 |
4 | ./build-ca // 生成根证书ca.crt和根密钥ca.key |
5 | ./build-key-server server // 注意:中间会提示设置密码,输入即可 |
6 | ./build-key client1 // 为客户端生成证书和密钥(这里有两个) |
7 | ./build-key client2 |
8 | ./build-dh // 创建迪菲·赫尔曼密钥,会生成dh2048.pem文件 |
9 | openvpn --genkey --secret keys/ta.key // 生成ta.key文件(防DDos攻击、UDP淹没等恶意攻击) |
复制证书
1 | cp dh2048.pem ca.crt server.crt server.key ta.key /etc/openvpn |
4、路由表
安装 iptables(一般都已安装)
1 | yum install iptables-services -y |
2 | service iptable start |
3 | iptables --flush |
设置并保存 iptables (注意备份),假设连接 vpn 后的 ip 为 10.8.0.x
1 | iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE // 增加 -o <网卡> 参数会导致无法上网 |
2 | iptables-save > /etc/sysconfig/iptables // 保存设置 |
打开并配置 /etc/sysctl.conf,将
1 | net.ipv4.ip_forward = 0 |
2 | // 修改为 |
3 | net.ipv4.ip_forward = 1 |
保存后重启网络服务
1 | service network restart |
5、设置端口转发
假定 eMule 的 TCP 和 UDP 端口分别为 5555 和 6666,vps 公网 ip 为 1.1.1.1,客户端连接 vpn 后得到的 ip 为 10.8.0.3, 分别执行
1 | iptables -t nat -A PREROUTING -p tcp -d 1.1.1.1 --dport 5555 -j DNAT --to 10.8.0.6:5555 |
2 | iptables -t nat -A PREROUTING -p udp -d 1.1.1.1 --dport 6666 -j DNAT --to 10.8.0.6:6666 |
3 | iptables-save > /etc/sysconfig/iptables |
完成两个端口转发规则的添加,这里只需要设置入站的转发即可,一开始我把出站的也加上了,通讯一直有问题,浪费了不少时间∠( ᐛ 」∠)_。查看 iptables 设置状态使用命令
1 | iptables -nL -t nat --line-numbers |
2 | // 或 |
3 | service iptables status |
iptables 的默认策略是 ACCEPT , 所以不用特意添加端口的入站规则。
6、分配固定 ip
因为模板规则里默认是启用客户端地址关联的(ifconfig-pool-persist ipp.txt), 所以服务器会按照记录为客户端分配上一次的 ip。
7、启动 openvpn
1 | service openvpn start |
8、设置开机自启动
1 | chkconfig openvpn on |
至此服务器的设置完成,接下去设置客户端。
配置客户端
1、在 windows 上安装客户端
2、复制客户端证书
安装完成后将服务器上生成的客户端证书复制一份到安装目录的 config 子目录中。客户端证书(在 /etc/openvpn/easy-rsa/keys 目录中)包含 ca.crt、ta.key、client.crt 和 client.key 四个文件。
3、修改客户端配置
首先从客户端安装目录下的 sample-config 中复制 client.ovpn 到 config 目录中。修改配置文件
1 | client |
2 |
3 | dev tun |
4 | proto udp |
5 | remote 1.1.1.1 1194 // 改为实际的 ip 和端口 |
6 | resolv-retry infinite |
7 | nobind |
8 | persist-key |
9 | persist-tun |
10 | ca ca.crt |
11 | cert client1.crt // 文件名一致 |
12 | key client1.key |
13 | remote-cert-tls server |
14 | tls-auth ta.key 1 |
15 | cipher AES-256-CBC |
16 | verb 3 |
4、启动客户端
运行后右键单击客户端任务栏图标,选择连接即可。如果一切顺利,客户端会提示连接成功。
Easy-RSA部分有些命令过时了,Easy-RSA现在都3.0版本了,可以看这个替代一下:https://www.howtoforge.com/tutorial/how-to-install-openvpn-server-and-client-with-easy-rsa-3-on-centos-8/#step-install-openvpn-and-easyrsa
easy-rsa2 确实是挺老的了,这文章写得很详细 d(>_< )