Ubuntu18.04所有流量都从代理服务器走,如何设置proxy?

Web、Mail、Ftp、DNS、Proxy、VPN、Samba、LDAP 等基础网络服务
回复
郑小喷
帖子: 28
注册时间: 2018-11-21 13:16
系统: 18.04

Ubuntu18.04所有流量都从代理服务器走,如何设置proxy?

#1

帖子 郑小喷 » 2019-02-14 17:28

服务器搭建好了,Windows下正常使用,但是Ubuntu下通过各种网上的方法设置proxy,始终有一些软件无法联网或者说是连接上服务器,命令行界面用curl国外的网站,不通,国内的可以!我用的有款软件叫Dropbox,安装程序需要联网下载,始终连接不上服务器。我是用终端连接我自己搭建的服务器,火狐浏览器通过设置后,可以正常访问谷歌,其他的都不行。我该如何设置?
zhangjint5
帖子: 304
注册时间: 2011-01-02 12:31

Re: Ubuntu18.04所有流量都从代理服务器走,如何设置proxy?

#2

帖子 zhangjint5 » 2019-02-14 21:30

研究下 ss-redir 和 tproxy ,这两货配合 iptables 使用,前者搞定 tcp 全局,后者搞定 udp 全局,我现在已经把它们搞到树梅派上做软路由实现全局走 socks5 代理! :)
zhangjint5
帖子: 304
注册时间: 2011-01-02 12:31

Re: Ubuntu18.04所有流量都从代理服务器走,如何设置proxy?

#3

帖子 zhangjint5 » 2019-02-20 19:05

给你个我自己的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的)。

代码: 全选


#!/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 之类的工具测试网络。
回复