mirror of
				https://github.com/Ysurac/openmptcprouter-feeds.git
				synced 2025-03-09 15:40:03 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			97 lines
		
	
	
	
		
			5.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
	
		
			5.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
## components
 | 
						|
 | 
						|
`ss-local` provides SOCKS5 proxy with UDP associate support.
 | 
						|
 | 
						|
	 socks5                                     ss              plain
 | 
						|
	--------> tcp:local_address:local_port ----> ss server -------> dest
 | 
						|
 | 
						|
`ss-redir`.  The REDIRECT and TPROXY part are to be provided by `ss-rules` script.  REDIRECT only works for tcp traffic (see also darkk/redsocks).  TPROXY is used to proxy udp messages, but it's only available in the PREROUTING chain and as such cannot proxy local out traffic.
 | 
						|
 | 
						|
	  plain             plain                                 ss              plain
 | 
						|
	---------> REDIRECT ------> tcp:local_address:local_port ----> ss server -----> original dest
 | 
						|
 | 
						|
	  plain            plain                                 ss              plain
 | 
						|
	---------> TPROXY -------> udp:local_address:local_port -----> ss server -----> original dest
 | 
						|
 | 
						|
`ss-tunnel` provides ssh `-L` local-forwarding-like tunnel.  Typically it's used to tunnel DNS traffic to the remote.
 | 
						|
 | 
						|
	  plain                                       ss               plain
 | 
						|
	---------> tcp|udp:local_address:local_port ------> ss server -------> tunnel_address
 | 
						|
 | 
						|
`ss-server`, the "ss server" in the above diagram
 | 
						|
 | 
						|
## uci
 | 
						|
 | 
						|
Option names are the same as those used in json config files.  Check `validate_xxx` func definition of the [service script](files/shadowsocks-libev.init) and shadowsocks-libev's own documentation for supported options and expected value types.  A [sample config file](files/shadowsocks-libev.config) is also provided for reference.
 | 
						|
 | 
						|
Every section have a `disabled` option to temporarily turn off the component instance or component instances referring to it.
 | 
						|
 | 
						|
Section type `server` is for definition of remote shadowsocks servers.  They will be referred to from other component sections and as such should be named (as compared to anonymous section).
 | 
						|
 | 
						|
Section type `ss_local`, `ss_redir`, `ss_tunnel` are for specification of shadowsocks-libev components.  They share mostly a common set of options like `local_port`, `verbose`, `fast_open`, `timeout`, etc.
 | 
						|
 | 
						|
We can have multiple instances of component and `server` sections.  The relationship between them is many-to-one.  This will have the following implications
 | 
						|
 | 
						|
 - It's possible to have both `ss_local` and `ss_redir` referring to the same `server` definition
 | 
						|
 - It's possible to have multiple instances of `ss_redir` listening on the same address:port with `reuse_port` enabled referring to the same or different `server` sections
 | 
						|
 | 
						|
`ss_rules` section is for configuring the behaviour of `ss-rules` script.  There can only exist at most one such section with the name also being `ss_rules`
 | 
						|
 | 
						|
	redir_tcp		name of ss_redir section with mode tcp_only or tcp_and_udp
 | 
						|
	redir_udp		name of ss_redir section with mode udp_only or tcp_and_udp
 | 
						|
	ifnames			only apply rules on packets from these ifnames
 | 
						|
 | 
						|
	--- for incoming packets having source address in
 | 
						|
 | 
						|
	src_ips_bypass		will bypass the redir chain
 | 
						|
	src_ips_forward		will always go through the redir chain
 | 
						|
	src_ips_checkdst	will continue to have their destination addresses checked
 | 
						|
 | 
						|
	--- otherwise, the default action can be specified with
 | 
						|
 | 
						|
	src_default		bypass, forward, [checkdst]
 | 
						|
 | 
						|
	--- if the previous check result is checkdst,
 | 
						|
	--- then packets having destination address in
 | 
						|
 | 
						|
	dst_ips_bypass_file
 | 
						|
	dst_ips_bypass		will bypass the redir chain
 | 
						|
	dst_ips_forward_file
 | 
						|
	dst_ips_forward		will go through the redir chain
 | 
						|
 | 
						|
	--- otherwise, the default action can be specified with
 | 
						|
 | 
						|
	dst_default		[bypass], forward
 | 
						|
 | 
						|
	--- for local out tcp packets, the default action can be specified with
 | 
						|
 | 
						|
	local_default		[bypass], forward, checkdst
 | 
						|
 | 
						|
Bool option `dst_forward_recentrst` requires iptables/netfilter `recent` match module (`opkg install iptables-mod-conntrack-extra`).  When enabled, `ss-rules` will setup iptables rules to forward through `ss-redir` those packets whose destination have recently sent to us multiple tcp-rst.
 | 
						|
 | 
						|
ss-rules uses kernel ipset mechanism for storing addresses/networks.  Those ipsets are also part of the API and can be populated by other programs, e.g. dnsmasq with builtin ipset support.  For more details please read output of `ss-rules --help`
 | 
						|
 | 
						|
Note also that `src_ips_xx` and `dst_ips_xx` actually also accepts cidr network representation.  Option names are retained in its current form for backward compatibility coniderations
 | 
						|
 | 
						|
## notes and faq
 | 
						|
 | 
						|
Useful paths and commands for debugging
 | 
						|
 | 
						|
	# check current running status
 | 
						|
	ubus call service list '{"name": "shadowsocks-libev"}'
 | 
						|
	ubus call service list '{"name": "shadowsocks-libev", "verbose": true}'
 | 
						|
 | 
						|
	# dump validate definition
 | 
						|
	ubus call service validate '{"package": "shadowsocks-libev"}'
 | 
						|
	ubus call service validate '{"package": "shadowsocks-libev"}' \
 | 
						|
		| jsonfilter -e '$["shadowsocks-libev"]["ss_tunnel"]'
 | 
						|
 | 
						|
	# check json config
 | 
						|
	ls -l /var/etc/shadowsocks-libev/
 | 
						|
 | 
						|
	# set uci config option verbose to 1, restart the service and follow the log
 | 
						|
	logread -f
 | 
						|
 | 
						|
ss-redir needs to open a new socket and setsockopt IP_TRANSPARENT when sending udp reply to client.  This requires `CAP_NET_ADMIN` and as such the process cannot run as `nobody`
 | 
						|
 | 
						|
ss-local, ss-redir, etc. supports specifying an array of remote ss server, but supporting this in uci seems to be overkill.  The workaround can be defining multiple `server` sections and multiple `ss-redir` instances with `reuse_port` enabled
 |