FastDFS 提供外网访问(Socket 上传下载)
系统环境
系统版本: CentOS 7.5
客户端(办公环境本地): 9.9.9.9
Nginx(用于映射 FastDFS 端口), 内网: 172.17.10.98(eth1) 公网:8.8.8.8(eth0)(测试IP)
Tracer: 172.17.10.24:22122
Storage1: 172.17.10.23:23000 Nginx: 8888
Storage2: 172.17.10.22:23001 Nginx: 8889
Storage3: 172.17.10.21:23002 Nginx: 8890
简介
测试环境(云服务器)的 FastDFS 需要提供办公环境访问,FastDFS 客户端上传文件是通过 Tracer 提供的 Storage 地址来连接上传的,所以说如果 FastDFS Storage 通过内网连接到 Tracer 注册的话那么只映射 FastDFS Tracer 地址,Tracer 将会把注册上来的 Storage 地址发送给客户端,然而在办公环境无法连接内网(也就是 Storage),那么文件将上载失败。利用这一原理,我们可以这么做,Storage 连接 Tracer 的时候将源 IP 修改为公网地址的IP地址那么这样就意味着 Tracer 就会把这个公网地址下发给客户端连接,然后这个地址上在做 Storage 的映射,也就是为什么我们的 Storage 端口都不一样的原因了否则你必须有足够的公网IP来解决这个问题。
Nginx(172.17.10.98) 配置
由于有 白名单限制(iptables filter INPUT) 除了 Tracer 端口之外,其他端口通过 Nginx 转发,TCP 转发配置请自行百度
Iptables 添加如下规则:
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 22122 -s 8.8.8.8,9.9.9.9,172.17.0.0/16 -j DNAT --to 172.17.10.24:22122
iptables -t nat -A POSTROUTING -p tcp -m tcp --dport 22122 -d 172.17.10.24 -j SNAT --to 8.8.8.8 # 注意这里 --to 8.8.8.8 而不是内网地址
iptables -t nat -A POSTROUTING -s 172.17.0.0/16 -o eth0 -j SNAT --to 8.8.8.8
需要注意的是 iptables filter FORWARD 需要允许通过以及需要打开路由功能 echo 1 > /proc/sys/net/ipv4/ip_forward(此项最好修改 /etc/sysctl.conf)
Tracer 配置
Tracer 服务器需要注意的是路由必须走 172.17.10.98
route add default gw 172.17.10.98
Storage 可走可不走此网关
启动 Tracer
Storage 配置
需要注意端口
修改这两个配置文件 mod_fastdfs.conf tracker.conf
tracker_server=8.8.8.8:22122 # 改为公网地址
启动 Storage
查看监控
/opt/fastdfs/bin/fdfs_monitor /opt/fastdfs/client.conf # 可以看到监控中的 ip_addr 已经为公网 IP 了
/opt/fastdfs/client.conf:
connect_timeout=30
network_timeout=60
base_path=/data/fastdfs_pay/tracker
tracker_server=8.8.8.8:22122
log_level=info
use_connection_pool = false
connection_pool_max_idle_time = 3600
load_fdfs_parameters_from_tracker=false
use_storage_id = false
storage_ids_filename = storage_ids.conf
http.tracker_server_port=80
客户端测试上传
/opt/fastdfs/bin/fdfs_upload_file /opt/fastdfs/client.conf /tmp/abc.txt