Ubuntu18.04所有流量都从代理服务器走,如何设置proxy?
-
- 帖子: 28
- 注册时间: 2018-11-21 13:16
- 系统: 18.04
Ubuntu18.04所有流量都从代理服务器走,如何设置proxy?
服务器搭建好了,Windows下正常使用,但是Ubuntu下通过各种网上的方法设置proxy,始终有一些软件无法联网或者说是连接上服务器,命令行界面用curl国外的网站,不通,国内的可以!我用的有款软件叫Dropbox,安装程序需要联网下载,始终连接不上服务器。我是用终端连接我自己搭建的服务器,火狐浏览器通过设置后,可以正常访问谷歌,其他的都不行。我该如何设置?
-
- 帖子: 304
- 注册时间: 2011-01-02 12:31
Re: Ubuntu18.04所有流量都从代理服务器走,如何设置proxy?
研究下 ss-redir 和 tproxy ,这两货配合 iptables 使用,前者搞定 tcp 全局,后者搞定 udp 全局,我现在已经把它们搞到树梅派上做软路由实现全局走 socks5 代理! :)
-
- 帖子: 304
- 注册时间: 2011-01-02 12:31
Re: Ubuntu18.04所有流量都从代理服务器走,如何设置proxy?
给你个我自己的sh把,半个月前写给自己用的!
首先 sysctl.conf 开启 net.ipv4.ip_forward = 1,这个不用多说!
另外需要设置 net.ipv4.conf.all.route_localnet = 1 否则 UDP 转发会出问题!这个是很多帖子都没提到的要害~!
老实说,网上很多国内关于 tproxy 和 iptables 的配置照着 man 改下就想当然的发布了,根本不行。我也是折腾了很久,从 bing 搜索老外的资料配合才搞定!
你的 ss 服务器要用C语言版本而不是 python 版,因为只有它支持UDP。
还有,这里做路由的机器运行的客户端是 ss-redir ,所以要先禁用其标准端的deamon自动运行,以免ss-redir运行不起来(C语言版本是带deamon的)。
需要注意的事情:
这个是运行在做路由的Linux设备上(必须双网卡,一个WAN,一个LAN),而不是运行在客户终端电脑上。所有使用这个路由的终端设备流量会被处理走socks5。客户端DNS解析流量也从socks5走的,所以直接使用外部DNS,例如8.8.8.8。(路由器本机的上网流量未配置走socks5,也没有必要,真要是需要对Linux来说也很容易)
由于socks5转发只支持 tcp/udp ,不支持 icmp ,所以客户端无法使用 ping 之类的工具测试网络。
首先 sysctl.conf 开启 net.ipv4.ip_forward = 1,这个不用多说!
另外需要设置 net.ipv4.conf.all.route_localnet = 1 否则 UDP 转发会出问题!这个是很多帖子都没提到的要害~!
老实说,网上很多国内关于 tproxy 和 iptables 的配置照着 man 改下就想当然的发布了,根本不行。我也是折腾了很久,从 bing 搜索老外的资料配合才搞定!
你的 ss 服务器要用C语言版本而不是 python 版,因为只有它支持UDP。
还有,这里做路由的机器运行的客户端是 ss-redir ,所以要先禁用其标准端的deamon自动运行,以免ss-redir运行不起来(C语言版本是带deamon的)。
代码: 全选
#!/bin/sh
### BEGIN INIT INFO
# Provides:
# Short-Description: for Raspbian 9
# Description: socks5 to ss-redir
# crond sample : /sbin/runuser -s /bin/sh -l root -c ${0}
### END INIT INFO
SSSADDR=XXX.XXX.XXX.XXX
#最好直接用IP,尽可能的不要用域名!
SSSPORT=8388
SSSPASS=password
SSSMETHOD=aes-256-cfb
LANNETWORK=192.168.200.0/24
ss_config=/dev/shm/ss-redir.json
echo { > ${ss_config}
echo \"server\": \"${SSSADDR}\", >> ${ss_config}
echo \"server_port\": ${SSSPORT}, >> ${ss_config}
echo \"local_address\": \"0.0.0.0\", >> ${ss_config}
echo \"local_port\": 12345, >> ${ss_config}
echo \"password\": \"${SSSPASS}\", >> ${ss_config}
echo \"timeout\": 300, >> ${ss_config}
echo \"method\": \"${SSSMETHOD}\", >> ${ss_config}
echo \"fast_open\": false, >> ${ss_config}
echo } >> ${ss_config}
screen -dmS ss-redir ss-redir -c ${ss_config} -u -v
# Create new chain
iptables -t nat -N SHADOWSOCKS
iptables -t mangle -N SHADOWSOCKS
# Ignore your shadowsocks server's addresses
# It's very IMPORTANT, just be careful.
iptables -t nat -A SHADOWSOCKS -d ${SSSADDR} -j RETURN
# Ignore LANs and any other addresses you'd like to bypass the proxy
# See Wikipedia and RFC5735 for full list of reserved networks.
# See ashi009/bestroutetb for a highly optimized CHN route list.
iptables -t nat -A SHADOWSOCKS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 169.254.0.0/16 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 172.16.0.0/12 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 192.168.0.0/16 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 224.0.0.0/4 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 240.0.0.0/4 -j RETURN
# Anything else should be redirected to shadowsocks's local port
iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 12345
# Add any UDP rules
ip rule add fwmark 0x01/0x01 table 100
ip route add local 0.0.0.0/0 dev lo table 100
iptables -t mangle -A SHADOWSOCKS -s ${LANNETWORK} ! -d ${LANNETWORK} -p udp -j TPROXY --on-port 12345 --on-ip 127.0.0.1 --tproxy-mark 0x1/0x1
# Apply the rules
iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS
iptables -t mangle -A PREROUTING -p udp -j SHADOWSOCKS
这个是运行在做路由的Linux设备上(必须双网卡,一个WAN,一个LAN),而不是运行在客户终端电脑上。所有使用这个路由的终端设备流量会被处理走socks5。客户端DNS解析流量也从socks5走的,所以直接使用外部DNS,例如8.8.8.8。(路由器本机的上网流量未配置走socks5,也没有必要,真要是需要对Linux来说也很容易)
由于socks5转发只支持 tcp/udp ,不支持 icmp ,所以客户端无法使用 ping 之类的工具测试网络。