个人博客
反正没人看

OpenVpn,服务器多ip出口,端口中转

公司最近买了个服务器,单网卡,多个固定公网IP,要配置账号,每个账号一个公网ip出口,经过询问网友、查询百度和谷歌,四拼八凑,操作成功,记录一下。

如果是centos7的 先看下面 换一下防火墙。centos6可以继续。

ip1:  1.1.1.1

ip2:  1.1.1.2

ip3:  1.1.1.3

网关:1.1.1.0

利用Docker来达到目的。

1、安装并启动 Docker

操作系统内核大于等于 3.10 的都可以安装最新版 Docker,可以直接运行官方的安装脚本一键安装。
执行脚本方法如下:

wget -qO- get.docker.com | bash 

安装完成后,运行下面的命令,验证是否安装成功。

docker version 

启动 Docker

systemctl start docker 

查看 Docker 启动状态

systemctl status docker

允许 Docker 开机自启

systemctl enable docker 

 

使用https://hub.docker.com/r/siomiz/softethervpn  这个镜像

参数镜像页面的写的很清楚

先拉取镜像

docker pull siomiz/softethervpn

然后启动三个容器

docker run -d --cap-add NET_ADMIN -p 40134:1194/udp -p 5134:500/udp -p 45134:4500/udp -p 17134:1701/tcp --restart=always --name openvpn134 siomiz/softethervpn
docker run -d --cap-add NET_ADMIN -p 40069:1194/udp -p 5069:500/udp -p 45069:4500/udp -p 17069:1701/tcp --restart=always --name openvpn069 siomiz/softethervpn
docker run -d --cap-add NET_ADMIN -p 40097:1194/udp -p 5097:500/udp -p 45097:4500/udp -p 17097:1701/tcp --restart=always --name openvpn097 siomiz/softethervpn

使用
docker ps -as
查看所有容器

-p 就是映射端口,格式为 主机端口:容器端口,,镜像内的openvpn的端口就是默认的1197,这个不管他。

指定主机服务器三个端口 分别为40134、40069和40097作为客户端连接过来的端口。

后面的-p可要可不要,看自己的需求,500 4500和1701 就是典型的L2TP vpn的端口了,l2tp的端口不能更改,所以不想使用它,也可以不写,如果想管理此softethervpn,映射一个5555的管理端口即可,我不管理他,使用默认的账号密码,如果你需要一个ip多个用户,还是要弄一下的,具体看docker仓库页面介绍。

 

启动后之后,等待一段时间,使用docker查看日志,就可以看到默认的用户名密码和openvpn证书了,可以直接复制 存到自己的文件中,在桌面建一个1.ovpn的文件,复制就可以了。

 

现在通过任意三个ip中的一个,使用特定的端口40134 40069 40097即可连接相应的openvpn服务端,但是这个时候 因为docker容器访问外网是使用主机的默认网关的,所以要做转发了

 

查看三个容器各自分配的内网ip,查看代码为:

docker inspect openvpn134

openvpn134是启动时候指定的名字(–name后面的),如果未指定,使用启动后的显示的id。

执行后,我们可以在末尾部分找到类似于下面的信息:

"EndpointID": "d5582119d31f9dd929c05a16dea25fa5a7894ac01ccd9f701f741ec47d977551",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "0e509efa6ad95f89a885838a336fd2d829136fa88a37a17813218e7c8059f8b9",
"EndpointID": "d5582119d31f9dd929c05a16dea25fa5a7894ac01ccd9f701f741ec47d977551",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
}
}
]

 

看里面 后几行,可以看到这个容器的内网ip就是172.17.0.2了。

这个时候给他做转发即可

iptables -t nat -I POSTROUTING -p all -s 172.17.0.2 -j SNAT --to-source 1.1.1.1
iptables-save

继续iptables-save,保存一下。

此时这个容器就是通过1.1.1.1访问外网了。到此结束。

 

 

对了iptables是centos6的东西

如果使用的是centos7+  默认就是firewall作为防火墙。

我们可以改成iptables。

步骤如下

查看firewall防火墙状态:

systemctl status firewalld

关闭firewall防火墙:

systemctl stop firewalld

关闭防火墙开机自启动

systemctl disable firewalld

在线安装iptables

yum install iptables-services

安装成功之后,启动

systemctl start iptables

设置开机启动

systemctl enable iptables.service

 

下面放一些防火墙的常规操作

开放端口 tcp和udp
/sbin/iptables -I INPUT -p tcp --dport 39004 -j ACCEPT
/sbin/iptables -I INPUT -p udp --dport 39004 -j ACCEPT

保存更改

iptables-save

查看端口开放情况

iptables -L -n

查看nat规则

iptables -L -t nat --line-number

删除nat规则,其中的1 就是上一个查看中前面的序号,注意! 每次删除 都会重新排列一次。

iptables -t nat -D POSTROUTING 1

重启防火墙

systemctl restart iptables

-A 追加规则-->iptables -A INPUT
-D 删除规则-->iptables -D INPUT 1(编号)
-R 修改规则-->iptables -R INPUT 1 -s 192.168.12.0 -j DROP 取代现行规则,顺序不变(1是位置)
-I 插入规则-->iptables -I INPUT 1 --dport 80 -j ACCEPT 插入一条规则,原本位置上的规则将会往后移动一个顺位
-L 查看规则-->iptables -L INPUT 列出规则链中的所有规则
-N 新的规则-->iptables -N allowed 定义新的规则

 

 

因为买个这个服务器 没有gia线路,高峰期线路不稳定,所以买一个gia线路的小鸡做中转,操作如下

中转机器系统为centos7

防火墙为firewall
开启NAT(一辈子只需要执行一次):

firewall-cmd --add-masquerade --permanent

开放TCP端口转发(本机端口40134转发到 1.1.1.1:40134

firewall-cmd --add-forward-port=port=40134:proto=tcp:toport=40134:toaddr=1.1.1.1 --permanent

开放UDP端口转发(本机端口40134转发到 1.1.1.1:40134)

firewall-cmd --add-forward-port=port=40134:proto=udp:toport=40134:toaddr=1.1.1.1 --permanent

这两个就是协议不同,其他都以一样,openvpn的端口基本是upd协议的,只写udp即可。

开放TCP和UDP端口(开放端口31002 的TCP和UDP)

firewall-cmd --add-port 40134/tcp --permanent
firewall-cmd --add-port 40134/udp --permanent

重载应用配置(配置完毕后必须进行这一步)

firewall-cmd --reload

如果不生效检查一下 协议是否开启转发(编辑文件:/etc/sysctl.conf ),保存后执行:sysctl -p

net.ipv4.ip_forward = 1

批量开放端口

firewall-cmd --add-port 30000-40000/udp --permanent
firewall-cmd --add-port 30000-40000/tcp --permanent

查看所有映射情况

firewall-cmd --list-all

删除端口转发(40000端口转发到10.0.2.24的3389 TCP协议转发)

firewall-cmd --remove-forward-port=port=40000:proto=tcp:toport=3389:toaddr=10.0.2.24 --permanent

 

 

感谢这些资料:

1、如何利用 CentOS 进行端口转发TCP+UDP协议转发

2、利用docker实现服务器多IP通讯

3、iptablesnat规则骚操作

4、v2ray多入口多出口IP

5、介绍几款 Docker 镜像

6、iptables增加、删除、修改、查询、保存防火墙策略教程

7、Centos7防火墙iptables安装及设置图文并茂【实现防火墙管理功能】

赞(0)
未经允许不得转载:诚然博客 » OpenVpn,服务器多ip出口,端口中转