以前在学校里用的是移动网,每人都有公网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
使用命令
yum install openvpn easy-rsa -y
安装 OpenVPN 和 easy-rsa。
2、配置 server.conf
复制模板配置
cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn
启用数据包转发(去掉注释)
push "redirect-gateway def1 bypass-dhcp"
修改 dns(查找DNS并修改)
push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4"
修改权限(去掉注释)
user nobody group nobody
3、生成证书
创建目录用于存放生成的证书
mkdir -p /etc/openvpn/easy-rsa/keys
复制 easy-rsa/2.0 目录下所有文件到 openvpn 目录
cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa
打开 /etc/openvpn/easy-rsa/vars 文件并按需要修改其中的默认配置
export KEY_COUNTRY="US" export KEY_PROVINCE="NY" export KEY_CITY="New York" export KEY_ORG="DigitalOcean" export KEY_EMAIL="sammy@example.com" export KEY_OU="Community" export KEY_NAME="server" // 这个名称在生成证书时会用到 export KEY_CN=openvpn.example.com
生成证书,按顺序逐个执行命令
cd /etc/openvpn/easy-rsa source ./vars // 初始化环境变量 ./clean-all // 清除原有证书 ./build-ca // 生成根证书ca.crt和根密钥ca.key ./build-key-server server // 注意:中间会提示设置密码,输入即可 ./build-key client1 // 为客户端生成证书和密钥(这里有两个) ./build-key client2 ./build-dh // 创建迪菲·赫尔曼密钥,会生成dh2048.pem文件 openvpn --genkey --secret keys/ta.key // 生成ta.key文件(防DDos攻击、UDP淹没等恶意攻击)
复制证书
cp dh2048.pem ca.crt server.crt server.key ta.key /etc/openvpn
4、路由表
安装 iptables(一般都已安装)
yum install iptables-services -y service iptable start iptables --flush
设置并保存 iptables (注意备份),假设连接 vpn 后的 ip 为 10.8.0.x
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE // 增加 -o <网卡> 参数会导致无法上网 iptables-save > /etc/sysconfig/iptables // 保存设置
打开并配置 /etc/sysctl.conf,将
net.ipv4.ip_forward = 0 // 修改为 net.ipv4.ip_forward = 1
保存后重启网络服务
service network restart
5、设置端口转发
假定 eMule 的 TCP 和 UDP 端口分别为 5555 和 6666,vps 公网 ip 为 1.1.1.1,客户端连接 vpn 后得到的 ip 为 10.8.0.3, 分别执行
iptables -t nat -A PREROUTING -p tcp -d 1.1.1.1 --dport 5555 -j DNAT --to 10.8.0.6:5555 iptables -t nat -A PREROUTING -p udp -d 1.1.1.1 --dport 6666 -j DNAT --to 10.8.0.6:6666 iptables-save > /etc/sysconfig/iptables
完成两个端口转发规则的添加,这里只需要设置入站的转发即可,一开始我把出站的也加上了,通讯一直有问题,浪费了不少时间∠( ᐛ 」∠)_。查看 iptables 设置状态使用命令
iptables -nL -t nat --line-numbers // 或 service iptables status
iptables 的默认策略是 ACCEPT , 所以不用特意添加端口的入站规则。
6、分配固定 ip
因为模板规则里默认是启用客户端地址关联的(ifconfig-pool-persist ipp.txt), 所以服务器会按照记录为客户端分配上一次的 ip。
7、启动 openvpn
service openvpn start
8、设置开机自启动
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 目录中。修改配置文件
client dev tun proto udp remote 1.1.1.1 1194 // 改为实际的 ip 和端口 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert client1.crt // 文件名一致 key client1.key remote-cert-tls server tls-auth ta.key 1 cipher AES-256-CBC 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(>_< )