标签: socat squid
介绍
内网服务器是指只有内网ip而没有公网ip的服务器。 一般情况下内网服务器无法跟公网通讯。
我们的生产或者测试环境中有不少是内网机器, 多少会造成不便。
那么如何实现内网机器也能像普通服务器一样使用呢?
我们一般通过代理的方式。而代理又需要部署在有公网ip的服务器上(也就是俗称的跳板机)。
一. http代理:squid
请求方向:从内到外
这种代理方式仅支持http的访问。
测试环境下,squid部署在sandbox3(10.168.13.96)上,而生产环境的squid部署在web-m上。
增加你需要转发的端口号。普通的80,443已经默认配置了
acl SSL_ports port 5000 # docker.oa.isuwang.com https
acl Safe_ports port 5000
Squid normally listens to port 3128
http_port 10.168.13.96:3128
启动方式: service squid start
而需要使用代理的内网机器, 需要做如下设置:
http_proxy=http://10.168.13.96:3128, https_proxy=http://10.168.13.96:3128, 这样普通的命令、脚本都能正常访问外网
java进程需要传入jvm参数:-Dhttp.proxyHost=10.168.13.96 -Dhttp.proxyPort=3128 -Dhttps.proxyHost=10.168.13.96 -Dhttps.proxyPort=3128
docker:
3.1 mkdir /etc/systemd/system/docker.service.d
3.2 vi /etc/systemd/system/docker.service.d/http-proxy.conf, 内容为
[Service]
Environment="HTTP_PROXY=http://10.168.13.96:3128/"
3.3 systemctl daemon-reload
3.4 校验: systemctl show --property=Environment docker
Environment=HTTP_PROXY=http://10.168.13.96:3128/"
3.5 重启docker daemon: systemctl restart docker
二. 端口转发:socat
请求方向:从外到内,从内到外
支持协议:tcp
应用场景: 例如需要从本地远程调试测试服务器的项目、短信接口等
案例:
- 本地调试sandbox2的ksservices
登录sandbox2的跳板机121.40.216.40, 输入如下命令:
socat TCP4-LISTEN:9997,bind=121.40.216.40,su=nobody,fork,reuseaddr TCP4:sandbox2:9997
其中, 9997为调试端口。
- sandbox2发短信,接口地址(注意是tcp协议,非http):sdk410.eucp.b2m.cn:80
socat TCP4-LISTEN:808,bind=10.168.139.194,su=nobody,fork,reuseaddr TCP4:sdk410.eucp.b2m.cn:80
其中, 10.168.139.194为跳板机的内网ip, 另外,由于目标端口80给nginx给占用了, 故我们改写了短信接口的端口配置为808,并在跳板机中转发到目标ip的80端口