公司最近买了个服务器,单网卡,多个固定公网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协议转发